我有一个简单的应用程序,我想让管理员创建一个新公司。我在控制器中的create方法如下:
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帖子都会给我一个错误Undefined method
build_for for class #<....>
是否因为has_many
关系?我不想为角色添加任何值,而是希望他们以后能够这样做。有没有办法解决这个问题?
答案 0 :(得分:3)
ActiveRecord不提供build_for
方法,因此出错。
您可能意味着build
,这是在集合关联上定义的方法。在这种情况下,您可能需要new
或create
,因为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