爲了簡化問題,我有3個表:Ruby on Rails的 - 保存和與連接表更新的屬性有很多=>通過
人
的has_many:能力,通過=>:統計
能力
的has_many:人,通過=>:統計
統計
belongs_to的:人
belongs_to的:能力
統計有一個名爲 '評級' 的額外屬性。
我希望做的是進行編輯的人形式總是列出當前數據庫中的所有的能力,讓我指定每一個等級。
對於我的生活,我無法弄清楚如何做到這一點。我設法得到它像這樣的東西創建一個新用戶時工作:
(從人民控制器)
def new
@character = Character.new
@abilities = Ability.all
@abilities.each do |ability|
@person.stats.build(:ability_id => ability.id)
end
end
From the people form:
<% for @ability in @abilities do %>
<%= fields_for "person[stats_attributes]" do |t| %>
<div class="field">
<%= t.label @ability.name %>
<%= t.hidden_field :ability_id, :value => @ability.id, :index => nil %>
<%= t.text_field :rating, :index => nil %>
</div>
<% end %>
<% end %>
這成功地讓我的能力與評級箱旁邊有一個列表,讓我保存他們,如果我正在創建一個新用戶。
問題是,如果我然後加載編輯表單(使用相同的表單部分),它不會帶回評級,如果我保存,即使具有完全相同的評級,它會創建重複條目統計信息表,而不是更新它。
我知道我是一個可怕的程序員,我可能這樣做了錯誤的方式,但我如何才能編輯表單召回分配給每個能力,該用戶的額定電流,其次我怎麼如果人和能力的組合已經存在,它會更新評分而不是重複評分?