0

私はそのcomponentモデルを持っていhas_many :frameworkます。フレームワークを私が書いた形式のコンポーネントに関連付けるには:

<div class="field">
  <%= f.label :frameworks %><br />
  <%= f.collection_select :frameworks, Framework.all, :id, :name, {}, {:multiple => true}  %>
</div>

しかし今、それは私に与えています:

Framework(#70243540172600) expected, got String(#70243531874180)

そしてもう1つの質問:

ボタンでこのdivを表示/非表示にする方法は?リストが膨大になる可能性があるためです。

4

1 に答える 1

0

Component has_many :frameworks の場合、collection_select は使用できません。

この場合、次のフォームを使用します。

<%= f.collection_select :frameworks, Framework.all, :id, :name ... etc... {:multiple => true} %>

params[:component][:frameworks] = ["3", "4", "55"] を返します。しかし、component.frameworks は Framework オブジェクトのみを受け入れる関連付けですが、文字列を渡します!

文字列化された整数 (フレームワークの ID) の配列を受け入れる手作りのアクセサーを使用する必要があります。

class Component < ActiveRecord::Base
  attr_accessible :framework_ids

  def framework_ids=(ids)
    ids.each do |framework_id|
      frameworks << Framework.find(framework_id)
    end
  end
end

次に、フォームセレクターは次のようになります。

<%= f.collection_select :framework_ids, Framework.all, :id, :name ... etc... %>

ボタンはどうですか... JQuery UIのことを学ばなければなりません。

于 2012-12-18T13:50:50.387 に答える