0

コントローラを持たないDefaultCompanyというモデルがあります。代わりに、フォームの[デフォルトの会社]チェックボックスをオンにした場合にuser.set_default_company(以下で定義)を呼び出すcompanys_controllerを使用してモデルを作成します。

デフォルトの会社は、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

そして、これがcompanys_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ことができ:userます:company:company_id:user_idset_default_company

編集:

exists = DefaultCompany.find(self.id)

あなたの論理によれば、これは間違っているようです。

于 2012-07-25T21:44:09.703 に答える
1

レールは一括割り当てでの命名に厳密であると思います。そのため、とをホワイトリストに登録しましたが、company_idとをホワイトリストに登録しuser_idていません。companyuser

割り当てを次のように変更してみてください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 に答える