私は数日前からこれに苦労しており、実装するのがそれほど難しくないと感じていても、最終的に尋ねることにしました。
Rails 3.1 を使用しており、 has_many :through 関連付けの結合テーブルの複数のレコードを単一のフォームで編集できるようにしたい
Ryan Bates の railscastを見ましたが、これはまさに私が探しているものではありません。
次に、必要なものに非常に近いこのソリューションを実装しようとしましたが、結合テーブルを編集していません。
これがシナリオです: 多くのスキルを持つプレイヤー (ユーザーのサブクラス) がいます。各プレーヤーには、整数 (1 から 10) として player_skill モデルに格納されているスキル レベルがあります。
プレイヤーのスキルを作成して表示し、値を設定して DB に保存することはできますが、DB から既存の値を取得して、ドロップダウン メニューで選択した値として表示することはできません。これらは私のモデルです:
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
各スキルごとのドロップダウン メニューを使用して、特定のプレーヤーのすべてのスキル レベルを単一のフォームで編集できるようにしたいと考えています。今のところ、設定してDBに保存することはできますが、編集フォームをリロードすると値を取得できません。
これは、編集フォームを作成するために使用するコードです。私のエラーは、既存の値をロードしていない 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 %>
どんな助け/ヒントも大歓迎です! ありがとう!