2014-02-05 78 views
2

我是第一個自己的項目的rails noob。Rails:通過form_for check_box爲HABTM關係分配多個參數

我使用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 

我的目標是做一個形式,創造酒的情況下,包括在酒可以購買的商店。這裏是我的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 

只要讓我知道你是否需要任何其他細節來處理t他的問題,還是已經有一個關於我已經錯過的問題。

在此先感謝

回答

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 
    .. 
+0

您還可以簡化您crreate方法:'@wine = Wine.new(PARAMS [:酒]) @ wine.shops << Shop.find(params [:shops]) end' – BroiSatse

+0

我仍然得到'未定義的方法'合併'3:Fixnum',其中3是一個sh的id op – SBfrr

+0

@SBfrr,更新了我的回答 – Santhosh