私は Rails に比較的慣れていないため、モデル間に HABTM が関連付けられているモデルを操作するのに非常に苦労しています。
これらは私のモデルです:
チャレンジ.rb:
class Challenge < ActiveRecord::Base
has_and_belongs_to_many :skills
attr_accessible :description, :name, :relevant_content, :solutions, :skills
end
スキル.rb:
class Skill < ActiveRecord::Base
has_and_belongs_to_many :challenges
attr_accessible :name
end
次の移行を使用して、challenges_skills という結合テーブルも作成しました。
class CreateChallengesSkills < ActiveRecord::Migration
def up
create_table :challenges_skills, :id => false do |t|
t.integer :challenge_id
t.integer :skill_id
end
end
def down
drop_table :challenges_skills
end
end
そして、以下のヘルパーを使用して、チャレンジに必要なスキルを選択しています。
<%= collection_select(:challenge, :skills, Skill.all, :id, :name, {}, {:multiple => "true"}) %>
HTML:
<select id="challenge_skills" multiple="multiple" name="challenge[skills][]">
<option value="2">Pesquisa</option>
<option value="3">Senso Critico</option>
<option value="4">Criatividade</option>
<option value="5">Colaboracao</option>
<option value="6">Comunicacao</option>
<option value="7">Proatividade</option>
</select>
これが私のparamsハッシュです:
{"utf8"=>"✓",
"authenticity_token"=>"n0ggK8eE7vjh+qY33lYbNLJtZW6Sz7LyM2IRVbAPwhM=",
"challenge"=>{"description"=>"My description.",
"skills"=>["", "3", "4"],
"name"=>"Test Challenge",
"relevant_content"=>"My relevant_content",
"solutions"=>"My solutions"},
"commit"=>"Create Challenge!"
}
エラー: スキル (#70228688111620) が必要ですが、文字列 (#14953820) を取得しました
問題は、スキル ハッシュを処理する方法がわからないことです。チャレンジ コントローラーの create アクション内でそれをオブジェクト配列に変換します。簡単なものであることはわかっていますが、実用的な解決策が見つかりません。スキル コレクションをチャレンジ コントローラー内のチャレンジ インスタンスに関連付けるコーディング方法を知りたいです。
ChallengesController#create
def create
@challenge = Challenge.new(params[:challenge])
???
ありがとう