0

我尝试创建一个家具对象,它与 has_many_and_belongs_to 与商店相关,这是我的模型:

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

  has_and_belongs_to_many :stores
end

我的问题是我不知道如何创建新家具,因为我尝试将家具与一个或多个带有复选框的商店相关联,但我收到此错误: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 回答