簡體   English   中英

根據數據庫以Rails形式預先選中復選框,然后在提交后更新數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM