私は数日からこれに苦労しており、最終的に実装するのが難しくないと感じても頼むことにしました。アソシエーションを使ってhas_manyを編集する方法
私はレール3.1を使用していると私は、単一のフォームにhas_manyのの結合テーブルの複数のレコードを編集できるようにしたい:私はRyan Bates' railscastsを見
会合を介しが、これは私はまさにではありません探して、
その後、私は私が必要なものに非常に近くに見えることthis solutionを実装しようとしたが、それは、結合テーブルを編集していません。
これはシナリオです: は、私は多くのスキルを持っている(ユーザーのsublassある)選手がいます。各プレイヤーは、player_skillモデルに整数(1〜10)として格納されているスキルレベルを持っています。
私は、選手のスキルを作成して表示することができていると私は値を設定し、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に保存することができますが、編集フォームをリロードすると値を取得できません。
これは私が編集フォームを作成するために使用するコードです。私は私のエラーは、私が既存の値をロードしていない選択のユーザーにあることを理解していますが、私はそうする方法を知らない。
<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 %>
大変助かりました! ありがとう!
おかげサリル!私たちはそこにほとんどいると思う。実際にはあなたのコードは1から6までの値を持つドロップダウンメニューを表示していますが(スキルは6つです)、player_skill.levelの現在の値と1から10の値を表示する必要があります。 <[1 '、1]、[' 2 '、2]、[' 3 '、3]、[' 4 '、4]、[ 5、5]、[6、6]、[7 '、7]、[' 8 '、8]、[' 9 '、9]、[' 10 '、10]]、player_skill。レベル))%> ' – moncino07
@ moncino07、必要な定数に従って私の答えを更新しました。それが役に立てば幸い。 – Salil