0

これは少し簡単だと思いましたが、非常に単純なものが欠けている可能性があります。ビューにドロップダウン リストをteams/create表示して、チームに適切なディビジョンを選択できるようにしたいと考えていました。そのディビジョンは、テーブルの列にid配置されます。division_idteams

私は2つのモデルを持っています:

class Team < ActiveRecord::Base
   attr_accessible :city, :name
   belongs_to :divison
   has_many :players
end

class Division < ActiveRecord::Base
   attr_accessible :name
   has_many :teams
end

およびそれに付随する移行:

create_table :divisions do |t|
  t.string :name

  t.timestamps
end

create_table :teams do |t|
  t.string :name
  t.string :city
  t.integer :division_id

  t.timestamps
end

ビューでは、ドロップダウン リストは期待どおりに機能します。

<%= collection_select(:team, :division_id, Division.all, :id, :name) %>

ただし、フォームを送信すると、値が に配置されません:division_id。代わりに、Can't mass-assign protected attributes: division_idエラーが発生します。私が行った検索から、attr_accessible を削除することはできましたが、それはセキュリティ上の欠陥をもたらします。

4

2 に答える 2

2

保存する前に、divition_id の値をオブジェクトに明示的に割り当てる必要があります。

@team = Team.new(params[:team]) # division_id is not set during mass-assignment
@team.division_id = params[:team][:division_id]
@team.save

私はそれがあなたの問題を解決すると思います。

于 2013-01-23T06:06:09.370 に答える
2

モデルで次のように変更できますattr_accessibleTeam

attr_accessible :city, :name, :division_id

あなたのTeamController createアクションでは、単にTeam.new(params[:team])属性の一括割り当てを行っている を呼び出していると思います。一括代入をサポートするすべての属性について、 で宣言する必要がありますattr_accessible

于 2013-01-23T06:06:40.283 に答える