0

注文/新規ページにこのようなフォームがあります。これを使用してモデルの場所を選択し、上記の選択ボックスで選択した内容に従って、場所からモデルを選択しました。

<%= f.label "SELECT MODEL LOCATION *" %>
          <div class="list_number">1</div><%= f.collection_select :location_id, Location.all, :id, :formatted_display, prompt: true, :required => true,  :class => 'chosen-select' %>

          <%= f.label "SELECT YOUR MODEL *" %>
          <div class="list_number">2</div>
          <%= f.grouped_collection_select :performer_id, Location.order(:name).map{|group| Performer.find_by_location_id(group.id).map{|performer| {'data-markup'=>performer.white_label.markup}}}, :performers, :name, :id, :first_name, include_blank: true, :required => true,  class: 'chosen-select' %>

マップを使用してデータ属性を設定すると、grouped_collection_select で次のエラーが発生します。

undefined method `map' for #<Performer:0x00000006813958>

このエラーを解決して必要なデータを取得するにはどうすればよいですか?


以下のコードを試した後

<%= f.grouped_collection_select :performer_id, Location.order(:name).map{|group| Performer.where(location_id: group.id).map{|performer| {'data-markup'=>performer.white_label.markup}}}, :performers, :name, :id, :first_name, include_blank: true, :required => true,  class: 'chosen-select' %>

次のエラーが表示されます

undefined method `performers' for [{"data-markup"=>#<BigDecimal:67e80c8,'0.0',9(36)>}]:Array

私が次のことを試したとき

<%= f.grouped_collection_select :performer_id, Location.order(:name), :performers, :name, :id, :first_name,Location.order(:name).map{|group| Performer.where(location_id: group.id).map{|performer| {'data-markup'=>performer.white_label.markup}}}, include_blank: true, :required => true,  class: 'chosen-select' %>

次のエラーが表示されます

undefined method `merge' for #<Array:0x000000069705a8>
4

1 に答える 1

0
Performer.find_by_location_id(group.id)

インスタンスを返しますがmap、Array のメソッドです。修正は、ビジネス ロジック (および APP 構造) によって異なります。Performer.where(location_id: group.id).map...多くの実行者がいる場合に使用できます。

このヘルパーを間違って使用しようとしていると思います。ドキュメントによると、 acollectionとを渡す必要がありgroup_methodます。group_method - The name of a method which, when called on a member of collection, returns an array of child objects representing the <option> tags.

オブジェクトの配列を[{'data-markup' => some_value}, ...]collection およびperformersgroup_method として渡します。Rails が呼び出そうとすると{'data-markup' => some_value}.performers、例外が発生します。

コレクションを次のように書き直す必要がありますperformers

お役に立てば幸いです

テストはできませんが、機能します (場所に多くの実行者がいる場合、またはビジネス ロジックに従って独自のメソッドを実装できる場合)

<%= f.grouped_collection_select :performer_id, Location.order(:name), :performers, :name, :id, :first_name, include_blank: true, :required => true,  class: 'chosen-select' %>
于 2013-10-08T18:43:26.637 に答える