为了简化问题,我有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 %>
这成功地让我的能力与评级箱旁边有一个列表,让我保存他们,如果我正在创建一个新用户。
问题是,如果我然后加载编辑表单(使用相同的表单部分),它不会带回评级,如果我保存,即使具有完全相同的评级,它会创建重复条目统计信息表,而不是更新它。
我知道我是一个可怕的程序员,我可能这样做了错误的方式,但我如何才能编辑表单召回分配给每个能力,该用户的额定电流,其次我怎么如果人和能力的组合已经存在,它会更新评分而不是重复评分?