我正在开发我的第一个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,则不选中它们。所以&#34; 100&#34;会导致第一个复选框被检查而第二个复选框没有。然后,当单击提交按钮时,我想根据当前表示复选框的内容生成一个新字符串(1表示已选中,0表示未选中),并使用此新值更新current_user.likes。我只是在学铁路,所以我非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
您可以将字符串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("")
答案 1 :(得分:0)
除非您有令人信服的架构理由(例如,您正在使用旧数据库),否则我强烈建议您不要像这样设置数据库。由于查询数据库效率低下,您从字符比较中获得的任何性能优势都将被忽略十倍。
相反,既然您正在使用Rails,那么就按照Rails的方式进行操作。
在数据库中包含每种类似的列。然后,当您编写表单时,您可以利用所有Rails&#39;表单助手,无需解析零和。
<%= check_box_tag(:like_acoustic) %>
<%= label_tag(:like_acoustic, "Acoustic") %>
您还可以轻松查询数据库中的相关内容:
User.where(like_acoustic: true)