几天以来,我一直在为此苦苦挣扎,最后决定问一下,即使我觉得实施起来应该不那么难。
我正在使用 rails 3.1,我希望能够以单一形式编辑 has_many 连接表的多个记录:通过关联
我看了Ryan Bates 的 railscasts但这不是我想要的,
然后我尝试实现这个看起来非常接近我需要的解决方案,但它没有编辑连接表。
这是场景:我有很多技能的玩家(他们是用户的子类)。每个玩家都有一个技能等级,它以整数(1 到 10)的形式存储在 player_skill 模型中。
我能够创建和展示玩家的技能,我可以设置值并将它们存储在数据库中,但我无法从数据库中检索现有值并将它们显示为下拉菜单中的选定值。这些是我的模型:
class Player < User
has_many :player_skills, :dependent => :destroy
has_many :skills, :through => :player_skills
accepts_nested_attributes_for :skills
attr_accessible :player_skills
end
class Skill < ActiveRecord::Base
has_many :player_skills
has_many :players, :through => :player_skills
end
# This stores the skill level as integer 1..10
class PlayerSkill < ActiveRecord::Base
belongs_to :player
belongs_to :skill
end
我希望能够通过每个技能的下拉菜单以单一形式编辑给定玩家的所有技能级别。现在我可以设置它们并将它们保存到数据库中,但是当我重新加载编辑表单时我无法检索这些值。
这是我用来创建编辑表单的代码。我知道我的错误出在 select 的用户身上,我没有加载现有值,但我不知道该怎么做。
<h3><%= @user.first_name %> <%= @user.last_name %></h3>
<% @skills = Skill.all %>
<%= form_for @user, :url => updateplayerskills_path(@user) do |f| %>
<div class="field">
<table border="1">
<tr>
<td>Skill Name</td>
<td>Level</td>
</tr>
<% @skills.each do |skill| %>
<%= f.fields_for :player_skills do |builder| %>
<tr>
<td><%=h skill.name %></td>
<td>
#Here how can I load and display the existing level's value??
#Shall I maybe use a different select method?
<%= f.select skill.id, 1..10 %>
</td>
</tr>
<% end %>
<% end %>
</table>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
非常感谢任何帮助/提示!谢谢!