2017-03-01 83 views
0

如何將多個值從複選框表單存儲到數據庫中?我已經搜遍了各種線索,但還沒有拿出任何東西。主要是因爲「問題」似乎總是涉及不同的部分。在複選框中接受多個值

爲了清楚起見,這裏是一個模仿我想要做什麼的例子,我不知道哪部分是錯的。

所以說,我們有我們的人

#schema.rb 
create_table "persons", force: :cascade do |t| 
    t.string "hobby", default: [], array: true 
end 

和模型

#person.rb 
serialize :hobby 

創建這個表所以,如果說我曾與複選框形式來讓用戶選擇自己喜歡的業餘愛好。例如,因爲這份愛好清單非常長,我將這些值存儲在一個模塊中。

#app/models/concerns/hobby_data.rb 
module HobbyData 
    Activities = [ 
    item_one, 
    item_two, 
    ... 
    ] 
end 

在控制器中,IM允許陣列

params.require(:person).permit({:hobby => []}) 

而在我的形式

#form for new/edit person 

<% form_for @person do |f| %> 
#other fields 
<% HobbyData::Activities.each do |activity| %> 
    <%= check_box_tag("hobby[]", activity) %> 
    <%= activity %> #for the activity name 
<% end %> 

我現在可以看到從日誌中被傳遞的值

hobby => ["item_one", "item_two"]

但是它沒有打到數據庫,有什麼想法?

+0

你爲什麼不分開存放業餘愛好而不是數組?讓Person.hobbies回報這個人的愛好會更有意義嗎?特別是當你使用複選框時。這意味着你已經有了預定義的愛好。 –

+0

我並不完全認爲,因爲我採取這種方法的唯一原因,而不是使用'text_field'來爲用戶輸入他們想要的任何內容,而是將其限制爲選擇的選項。沒想到創建一個Hobby類,創造一大堆業餘愛好並使用主動記錄關聯會「有意義」。會使用主動記錄協會更好? – angkiki

+0

由於你正在使用複選框,因爲你提到我以爲你有一個愛好列表。如何讓他們將自己的愛好打包成一個盒子,然後將其全部存儲爲字符串而不是數組?或者你想創建業餘愛好的鏈接? –

回答

0

我認爲問題出現在您的表單中。由於您使用,因此必須明確聲明hobby[]屬性所屬的範圍。所以你的形式應該是這樣的:

<% form_for @person do |f| %> 
    <% HobbyData::Activities.each do |activity| %> 
    <%= check_box_tag("person[hobby][]", activity) %> <-- notice this change 
    <%= activity %> #for the activity name 
    <% end %> 
<% end %> 

在另一方面,這裏還有這種形式助手,所以你可以做這樣的......

<% form_for @person do |f| %> 
    <% HobbyData::Activities.each do |activity| %> 
    <%= f.check_box :hobby, { multiple: true }, activity, nil %> 
    <% end %> 
<% end %> 

這裏更多:http://apidock.com/rails/ActionView/Helpers/FormHelper/check_box

+0

同樣的問題,我可以看到它作爲一個數組傳遞,但它不保存到數據庫...也沒有回滾錯誤。任何想法可能的原因? – angkiki

+0

對不起,像魅力一樣工作。錯誤是在我的部分解析參數。乾杯隊友:) – angkiki

+0

不客氣!樂於幫助。乾杯! – rbmrclo

-1

official rails documentation

fields_for(record_name, record_object = nil, options = {}, &block) 

圍繞創建類似的form_for特定模型對象範圍,但 不創建表單標籤本身。這使得fields_for 適合以相同的形式指定其他模型對象。

+0

我明白你正試圖幫助我,但這本身並不能解釋我的問題的解決方案... – angkiki