0

has_many_and_belongs_to と店舗との関係にある家具オブジェクトを作成しようとしています。これが私のモデルです。

class Furniture < ActiveRecord::Base
  attr_accessible :area, :description, :name, :size

  has_and_belongs_to_many :stores
end

私の問題は、新しい家具を作成する方法がわからないことです。これは、チェック ボックスを使用して家具を 1 つまたは複数の店舗に関連付けようとしたときに、次のエラーが発生したためです: undefined method merge for #<Store:0x007ff16ae27e40>.

これらは、フォームを使用したビューと、新しいアクションと作成アクションを使用したコントローラーです。

ビュー:

<%= form_for @furniture do |f| %>
        <%= f.label :name %>
        <%= f.text_field :name %> <br><br>

        <%= f.label :description %>
        <%= f.text_field :description %> <br><br>

        <%= f.label :size %>
        <%= f.text_field :size %> <br><br>

        <% @store.each do |store| %>
            <div>
                <%= f.check_box :stores, store %>
                <%= store.name %>
            </div>
        <% end %>

        <%= f.submit %>

    <% end %>

コントローラー

    def new
        @furniture = Furniture.new
        @store = Store.order('name ASC')
      end

      def create
        @furniture = Furniture.create(params[:furniture])
        redirect_to admins_path
      end

どうすれば解決できますか?? この関係で新しいオブジェクトを作成するための提案はありますか??

どうもありがとうございました

編集:家具と店の間に結合テーブルがあります

4

1 に答える 1

1

has_and_belongs_to 関連付けはcollection_singular_ids=、現在のケースでは となるメソッドを追加します@furniture.store_ids=。ドキュメントによると

collection_singular_ids= メソッドは、必要に応じて追加および削除することにより、指定された主キー値によって識別されるオブジェクトのみをコレクションに含めます。

したがって、このアイデアを使用して、店舗を家具に追加できます。交換

<% @store.each do |store| %>
  <div>
    <%= f.check_box :stores, store %>
    <%= store.name %>
  </div>
<% end %>

<% @store.each do |store| %>
  <div>
    <%= f.check_box :store_ids, {:multiple => true}, store.id, nil %>
    <%= store.name %>
  </div>
<% end %>
于 2013-06-15T11:14:37.620 に答える