[英]Pre-check checkboxes in rails form based on database and then update database after submit
我正在開發我的第一個Rails應用程序,但是遇到了問題。 基本上,在我的用戶模型中,我有一列稱為likes的列,默認情況下將其設置為零字符串,並且該字符串中的每個位置均應表示一個特定的復選框。 如果有所不同,數據庫為sqllite3。 我的復選框設置如下
//The string in question is stored in
<%= current_user.likes %>
<%= form_tag do %>
<%= check_box_tag(:like_acoustic) %>
<%= label_tag(:like_acoustic, "Acoustic") %>
//More checkboxes
<%= submit_tag 'Save' %>
我想做的是預檢查任何復選框(在頁面加載時)是否在字符串中的對應值是1,並且如果它是0,則不選中它們。因此“ 100”將導致第一個復選框被選中,第二個復選框被選中兩個沒有。 然后,當單擊“提交”按鈕時,我想根據復選框當前表示的內容生成一個新字符串(1表示選中,0表示未選中),並使用此新值更新current_user.likes。 我只是在學習Rails,所以我非常感謝任何幫助。 謝謝!
您可以將字符串current_user.likes
拆分為數字數組,然后遍歷它們:
<% current_user.likes.split("").each do |like| %>
<%= "Label" %>
<%= check_box_tag 'likes[]', !like.to_i.zero?, !like.to_i.zero? %>
<% end %>
您可以在提交以下內容后檢索字符串:
likes.join("")
除非您有令人信服的架構原因(例如,正在使用舊數據庫),否則我強烈建議您不要像這樣設置數據庫。 查詢數據庫效率低下,從字符比較中獲得的任何性能優勢都將被抵消十倍。
相反,由於您使用的是Rails,請以Rails的方式進行操作。
在數據庫中為每種喜歡的內容添加一列。 然后,當您編寫表單時,您可以利用所有Rails的表單助手,而不必解析1和0。
<%= check_box_tag(:like_acoustic) %>
<%= label_tag(:like_acoustic, "Acoustic") %>
您還將獲得能夠輕松查詢喜歡的數據庫的優勢:
User.where(like_acoustic: true)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.