2

私は 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])

    ???

ありがとう

4

2 に答える 2

-5

has_many :through私のアドバイスは、HABTM に近づかないようにして、時間の経過とともに作業が容易になり、変更 (属性の追加) がより柔軟になるHABTM に切り替えることです。

見る

http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

https://stackoverflow.com/a/11601236/631619

そして、ここに2つの素晴らしい比較があります:

http://railscasts.com/episodes/47-two-many-to-many

于 2013-04-11T23:26:43.100 に答える