2012-04-28 23 views
1

我正在使用acts_as_taggable_on的遺留項目,它需要標籤來陣列。我有一個選擇框,允許用戶在名爲類別的字段中的課程中選擇標籤。創建批量分配的唯一方法是如果params看起來像這樣params = {:course => {:categories => ['Presentation']}}。我目前與這個幫手的觀點:陣列作爲參數從Rails選擇助手

<%= f.select 'categories', ['Presentation' , 'Round Table' , 'Demo', 'Hands-on'] %> 

這將給我一個參數,如params = {:course => {:categories => 'Presentation'}}。這是行不通的,因爲行爲作爲標籤山牆顯然不能處理除集合以外的其他任何東西。

我試圖改變categoriescategories[]但後來我得到這個錯誤:

undefined method `categories[]' for #<Course:0x007f9d95c5b810> 

有誰知道正確方式格式化我的選擇標記的數組的形式返回到控制器?我正在使用Rails 3.2.3

回答

0

我沒有與acts_as_taggable_on一起工作,但也許這個簡單的黑客將適合你?你應該把它放在大規模分配之前。

category = params[:course][:categories] 
params[:course][:categories] = [category] 
+0

工作,但它不是我要找的,鐵軌應支持通過數組傳遞選擇參數 – Schneems 2012-04-28 21:42:56

0

如果你只打算讓一個標籤的選擇,你可以這樣做:

<%= f.select 'categories', [['Presentation'] , ['Round Table'] , ['Demo'], ['Hands-on']] %> 

每一個項目陣列將擁有第一個爲顯示值,以及最後的返回值,在這種情況下,它們都會返回相同的東西,因爲數組的第一個元素與數組作爲一個元素時的最後一個元素相同。

+0

該語法不起作用,鋼軌只是拉出數組中的字符串。所以'''演示'''就是'演示' – Schneems 2012-04-28 21:49:40

0

看起來像select不會給你那個選項。

如果我理解正確的話,一個選擇可能是使用select_tag代替,只是更加明確一些,你想在PARAMS選擇:

<%= select_tag 'course[categories][]', options_for_select(['Presentation' , 'Round Table' , 'Demo', 'Hands-on']) %> 

這應該讓你的PARAMS你需要他們的方式。

0

下面是我用什麼我的項目之一:

<% options = { include_blank: true } %> 

<% html_options = { required: true, name: "#{f.object_name}[#{resource.id}][days][]" } %> 

<%= f.select :days, DAYS, options, html_options %> 

沒有html_options[:name],Rails的處理選擇標記的名稱和吐出像

service[service_add_ons_attributes][11][days] 

但我需要

service[service_add_ons_attributes][11][days][] 

所以我重寫它。

希望有所幫助。