Rails:通过form_for check_box为HABTM关系分配多个参数

时间:2014-02-05 10:19:30

标签: ruby ruby-on-rails-3 checkbox has-and-belongs-to-many

我是第一个自己项目的铁杆菜鸟。

我使用has_and_belongs_to_many关系链接了两个模型:Wine和Shop。为了简单起见,葡萄酒可以在不同的商店出售,特定的商店可以出售许多不同的葡萄酒。以下是模型:

class Shop < ActiveRecord::Base
 has_and_belongs_to_many :wines
end

class Wine < ActiveRecord::Base
  has_and_belongs_to_many :shops
end

我的目标是创建一个表单来创建Wine的实例,包括可以购买葡萄酒的商店。这是我的wines_controller:

  def new
    @wine = wine.new
    @shops = Shop.all

   respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @wine }
    end
  end

 def create
    @wine = Wine.new(params[:wine])
    params[:shops].each do |id|
      @wine.shops << Shop.find(id)
    end 
end

这是我在新视图中呈现的_form视图:

<%  @shops.each do |t|  %>
<%= f.label t.name  %>
<%= f.check_box :shops, t.id %>
<% end %>

我已经尝试了很多东西并花了好几个小时但却无法找到解决方案。除了其他事情,我看了一下这些问题,但我无法让它发挥作用:

最后我得到了一个

undefined method `merge' for 3:Fixnum

如果您需要任何其他详细信息来处理此问题,或者如果我已经错过了这方面的问题,请告诉我。

提前致谢

1 个答案:

答案 0 :(得分:2)

试试这个

<%  @shops.each do |t|  %>
  <%= f.label t.name  %>
  <%= check_box_tag "shops[]", t.id %>
<% end %>

和您的控制器代码

def create
  @wine = Wine.new(params[:wine])
  @shops = Shop.find params[:shops]
  @wine.shops = @shops
  ..