如何將多個值從複選框表單存儲到數據庫中?我已經搜遍了各種線索,但還沒有拿出任何東西。主要是因爲「問題」似乎總是涉及不同的部分。在複選框中接受多個值
爲了清楚起見,這裏是一個模仿我想要做什麼的例子,我不知道哪部分是錯的。
所以說,我們有我們的人
#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"]
但是它沒有打到數據庫,有什麼想法?
你爲什麼不分開存放業餘愛好而不是數組?讓Person.hobbies回報這個人的愛好會更有意義嗎?特別是當你使用複選框時。這意味着你已經有了預定義的愛好。 –
我並不完全認爲,因爲我採取這種方法的唯一原因,而不是使用'text_field'來爲用戶輸入他們想要的任何內容,而是將其限制爲選擇的選項。沒想到創建一個Hobby類,創造一大堆業餘愛好並使用主動記錄關聯會「有意義」。會使用主動記錄協會更好? – angkiki
由於你正在使用複選框,因爲你提到我以爲你有一個愛好列表。如何讓他們將自己的愛好打包成一個盒子,然後將其全部存儲爲字符串而不是數組?或者你想創建業餘愛好的鏈接? –