0

认为这会有点简单,我可能会遗漏一些非常简单的东西。我想要一个视图上的下拉列表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,但这会带来安全漏洞。

4

2 回答 2

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

我认为它会解决你的问题。

于 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 回答