2017-05-26 38 views
0

我有一個簡單的應用程序,我想讓管理員創建一個新公司。我在控制器中創建方法如下:未定義的方法`build_for`在Rails中的類

def create 
    @company = Company.find_by({ name: company_create_params[:company_name] }) 

    if @company.nil? 
     @company = Company.build_for(company_create_params) 
    else 
     return render :status => 200, :json => { 
       :error => true, 
       :reason => 'This company already exists in the database!' 
     } 
    end 

    if @company.save 
     return render :status => 200, :json => { 
       :success => true 
     } 
    else 
     return render :status => 500, :json => { 
       :error => true, 
       :reason => 'There was a problem adding the company' 
     } 
    end 
end 

private 

def company_create_params 
    params.require(:company).permit(:company_name, :company_total_credits) 
end 

而且我的公司模式是:

class Company < ActiveRecord::Base 
    has_many :role 
end 

但每次我做了一個API後的時間它給了我build_for for class #<....>

錯誤Undefined method是否因爲has_many關係?我不想爲這些角色增加任何價值,而是希望他們稍後能夠做到。有沒有辦法解決這個問題?

+0

您可以添加整個錯誤?,這Rails的版本:

你的整個動作可以顯著按照一些約定,順便可以減少? –

+0

不應該是'Company.build(...)'? – Gerry

+0

@Gerry是的,你說得對。這是我的不好,對不起! – anonn023432

回答

3

ActiveRecord不提供build_for方法,因此錯誤。

你可能意思是build,這是一個在集合關聯上定義的方法。在這種情況下,您可能想要newcreate,因爲Company是模型,而不是關聯。

class Company < ActiveRecord::Base 
    has_many :roles 
    validates :company_name, uniqueness: true 
end 

# controller 
def create 
    @company = Company.new(company_create_params) 

    if @company.save 
    render json: { success: true } 
    else 
    render status: 500, json: { 
     error: true, 
     reason: @company.errors.full_messages.to_sentence 
    } 
    end 
end