认为这有点简单,我可能会遗漏一些非常简单的事情。我想在teams/create
视图上有一个下拉列表,让我为一个团队选择合适的部门,id
将放在division_id
列的teams
列中表
我有两种模式:
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,但这会带来安全漏洞。
答案 0 :(得分:2)
您需要在保存之前将division_id的值显式指定给对象。
@team = Team.new(params[:team]) # division_id is not set during mass-assignment
@team.division_id = params[:team][:division_id]
@team.save
我认为它会解决你的问题。
答案 1 :(得分:2)
您可以修改attr_accessible
模型中的Team
:
attr_accessible :city, :name, :division_id
我想在您的TeamController
create
操作中,您只是调用Team.new(params[:team])
,它正在对属性进行大量分配。对于您希望支持批量分配的每个属性,您需要在attr_accessible
中声明它。