使用其他模型的ID更新模型

时间:2013-01-23 05:57:28

标签: ruby-on-rails ruby model foreign-keys

认为这有点简单,我可能会遗漏一些非常简单的事情。我想在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,但这会带来安全漏洞。

2 个答案:

答案 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中声明它。

相关问题