Rails中类的未定义方法`build_for`

时间:2017-05-26 21:39:30

标签: ruby-on-rails ruby activerecord

我有一个简单的应用程序,我想让管理员创建一个新公司。我在控制器中的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关系?我不想为角色添加任何值,而是希望他们以后能够这样做。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分: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