2014-02-23 71 views
0

我想在爲我的標準表格填充Event模型時添加一些額外的參數(類別)。他們不在我的事件表中(我在EventsCategory模型中都有表categories_eventshmbtm)。這裏是我的_form代碼:在rails中使用check_box_tag傳遞額外的參數

<% @categories.each do |category| %> 
    <div class="field"> 
    <%= check_box_tag(:category, category.id) %> 
    <%= label_tag(:category, "#{category.name}") %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 

    <% end %> 

我傳遞類別new行動 - 這是簡單的Category.all

這是我在事件控制器代碼

def new 
    @event = Event.new 
    @categories = Category.all 
    end 

def create 
    @event = Event.new(event_params) 
    @category_id = Category.find(params[:category]) 

    respond_to do |format| 
     if @event.save 
     format.html { redirect_to @event, notice: 'Event was successfully created.' } 
     format.json { render action: 'show', status: :created, location: @event } 
     else 
     format.html { render action: 'new' } 
     format.json { render json: @event.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

後來我想將category_id和event_id放入categories_events中,但我有NoMethodError

undefined method `category_id' for #<Event:0x374c268> 

和@ event.safe是問題

參數看起來像這樣

{"utf8"=>"✓", 
"authenticity_token"=>"stL+sdIhxttrk3KjkLJsuCXubjaDpNBbrLYtpjv8clw=", 
"event"=>{"name"=>"asdsa", 
"place"=>"asdas", 
"description"=>"dsadsa"}, 
"commit"=>"Create Event", 
"category"=>"2"} 

我認爲這個問題是太多的參數在新的(event_params),但看着參數括號告訴我,這不該爲了讓它成爲軌道可接受的問題不成問題。

錯誤堆棧跟蹤: http://pastebin.com/kQK1fni6

更新event_params

def event_params 
     params.require(:event).permit(:name, :place, :description, :category_ids) 
    end 
+0

請你分享'event_params'方法和錯誤堆棧跟蹤。 –

+0

def event_params params.require(:event).permit(:name,:place,:description,:category) end app/controllers/events_controller.rb:32:in' block in create' app/controllers/events_controller.rb:31:在'創建' 第31行:respond_to 第32行:if @ event.save –

+0

請您分享您收到的錯誤的完整錯誤堆棧跟蹤。並將其添加到問題中,而不是發表評論。它在那裏更具可讀性。 –

回答

1

調整你check_box_tag以下幾點:

<%= check_box_tag("event[category_ids][]", category.id, @event.categories.include?(category)) %> 
<%= label_tag("event[category_ids][]", category.name) %> 

一件事,你必須category_ids添加到您的白名單屬性。

+0

嘿。感謝您的幫助,但現在我有「無法找到沒有ID的類別」錯誤。問題在於 @category_id = Category.find(params [:category_ids]) –

+0

該行有什麼作用?你能刪除它嗎? – Hesham

+0

好吧我有aswer - 在你的解釋之後,我忘了更改驗證(ad's'到category_ids)。要回答你的問題,我需要它添加category_id和event_id來連接表categories_events。感謝您的時間和幫助:) –

1

要解決Couldn't find Category without an ID 更換

@category_id = Category.find(params[:category_ids]) 

@category_id = Category.find(params[:event][:category_ids]) 

如果檢查params哈希你會看到,由於在複選框代碼更新(由H-人的建議) ,category_ids將會是params[:event]鍵值的一部分。

+0

是的,但從我所能看到的他只是讓我通過更多的類別(這是偉大的)但我回來了「未定義的方法'category_id'爲#<事件:0x4f9bff0>」 我做了所有包括白名單的屬性。錯誤堆棧你的意思是? http://pastebin.com/kQK1fni6 –

+0

@ user3344159你說得對。這就是我的意思stacktrace。 –

+0

@ user3344159你的'params'現在看起來像什麼?請在您的問題中更新它,因爲原始問題中的參數並不反映這一變化。 –