Ruby on rails Rails-如何将多个复选框组合为数据库中的一个值?
作为我正在构建的应用程序的一部分,我需要存储需要执行某些操作的日期 目前,我将其存储在一个7位字符串中,每个数字对应一周中的一天。任何一天的值为1表示该动作应在当天发生,值为0表示该动作不应发生 例如,字符串0101110表示操作应在每周的星期二、星期四、星期五和星期六运行 在我的表格中,我设置了七个复选框,每个名字对应一个复选框 如何将这七个布尔结果合并为一个位字符串,以便将其保存在数据库中 您是在视图中还是在模型中执行此操作 我自己也做了一些思考,其中一个选项(在视图中)可能是在表单中设置一个隐藏字段,它是从复选框中连接/连接七个布尔值的结果。然后,复选框的值可以在提交时丢弃。我只是不太确定如何在rails中实现这一点 另一种选择是处理模型中的合并。再一次-不太确定该怎么办Ruby on rails Rails-如何将多个复选框组合为数据库中的一个值?,ruby-on-rails,database,Ruby On Rails,Database,作为我正在构建的应用程序的一部分,我需要存储需要执行某些操作的日期 目前,我将其存储在一个7位字符串中,每个数字对应一周中的一天。任何一天的值为1表示该动作应在当天发生,值为0表示该动作不应发生 例如,字符串0101110表示操作应在每周的星期二、星期四、星期五和星期六运行 在我的表格中,我设置了七个复选框,每个名字对应一个复选框 如何将这七个布尔结果合并为一个位字符串,以便将其保存在数据库中 您是在视图中还是在模型中执行此操作 我自己也做了一些思考,其中一个选项(在视图中)可能是在表单中设置一
感谢您的帮助,提前谢谢 将工作日的复选框值定义为模型上的虚拟属性,并在保存之前将它们连接到
挂钩上。在您的模型中:
attr_writer :mon, :tue, :wed, :thu, :fri, :sat, :sun
before_save :set_weekdays
private
def set_weekdays
self.weekdays = bitstr(@mon) + bitstr(@tue) + bitstr(@wed) # etc
end
def bitstr(bool)
bool ? "1" : "0"
end
确保在Rails 4中允许将mon和co作为模型的强参数。您可能还希望为这些属性定义从位字符串填充的getter,以便表单可以使用编辑时预先选择的正确复选框进行呈现。我假设week列为week
您可以创建type:text的week列,并将其添加到您的模型中
serialize:week
:这有助于在列中保存数组
接下来,创建一个班级周,其中Week.rb:
class Week
include ActiveModel::Model
attr_accessor :id, :name
DAYS = [
{id: 1, "day" => "monday"},
{id: 2, "day" => "tuesday"},
...
]
def self.days
DAYS.map {|d| self.new(
id: d[:id],
name: d[:day]
)}
end
end
然后,您可以从视图中调用复选框,如下所示:
<%= f.collection_check_boxes(:week, Week.days, :id, :name, include_hidden: false) do |b| %>
<%= b.check_box(class: "check_box") %> <%= b.object.name %>
<% end %>
希望这对你有帮助
params.require(:user).permit(week: [])