2013-01-23 37 views
0

認爲這會有點簡單,我可能會錯過一些非常簡單的事情。我希望在teams/create視圖上有一個下拉列表,讓我可以爲一個團隊選擇相應的分區,id將放置在teams表中的division_id列中。用另一個模型的ID更新模型

我有兩個型號:

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

您可以通過修改attr_accessibleTeam型號:

attr_accessible :city, :name, :division_id 

想象你TeamControllercreate動作你簡單地調用Team.new(params[:team]),這是做屬性的質量分配。對於想要支持批量分配的每個屬性,您需要在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 

我認爲它會解決您的問題。

相關問題