基于数据库预先检查rails表单中的复选框,然后在提交后更新数据库

时间:2017-03-15 01:52:58

标签: ruby-on-rails sqlite

我正在开发我的第一个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。我只是在学铁路,所以我非常感谢任何帮助。谢谢!

2 个答案:

答案 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)