0

我有一个名为 DefaultCompany 的模型,它没有控制器,而是通过 Companies_controller 创建它,如果他们选中表单上的“默认公司”复选框,它会调用 user.set_default_company(定义如下)。

默认公司是 user_id 和 company_id 的连接表。

class DefaultCompany < ActiveRecord::Base
  attr_accessible :company_id, :user_id
  belongs_to :company
  belongs_to :user
end

我不断收到以下错误:

Can't mass-assign protected attributes: company, user 
app/models/user.rb:22:in `set_default_company'
app/controllers/companies_controller.rb:23:in `create'

我已将我的用户模型设置为能够接受 DefaultCompany 的嵌套属性,如下所示

class User < ActiveRecord::Base
  has_one :default_company
  accepts_nested_attributes_for :default_company
  attr_accessible :default_company_attributes

  def set_default_company(company)
    exists = DefaultCompany.find(self.id)
    if exists
      exists.update_attributes(company: company)
    else 
      DefaultCompany.create(company: company, user: self)
    end
  end
end

这是company_controller.rb的创建操作

def create
@company = Company.new(params[:company])

if @company.save
  if params[:default_company]
    current_user.set_default_company @company.id
  end
  flash[:notice] = "Company was successfully created."
  Role.assign_creator(@company.id, current_user.id)
  redirect_to @company
else
  redirect_to new_company_path
  end
end

所以我不确定我需要添加什么才能通过大规模分配,有人可以帮我弄清楚/解释这个吗?

4

2 回答 2

1

您可以在方法调用中将attr_accessible属性更改Company:userand:company或设置:company_idand 。:user_idset_default_company

编辑:

exists = DefaultCompany.find(self.id)

根据您的逻辑,这似乎是错误的。

于 2012-07-25T21:44:09.703 回答
1

我相信 Rails 对批量分配中的命名非常严格,所以虽然你已经将 and 列入白名单company_id,但user_id你并没有将companyand列入白名单user

尝试将分配更改set_default_company为:

if exists
  exists.update_attributes(company_id: company.id)
else 
  DefaultCompany.create(company_id: company.id, user_id: self.id)
end
于 2012-07-25T21:47:23.147 回答