Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-如何将多个复选框组合为数据库中的一个值?_Ruby On Rails_Database - Fatal编程技术网

Ruby on rails Rails-如何将多个复选框组合为数据库中的一个值?

Ruby on rails Rails-如何将多个复选框组合为数据库中的一个值?,ruby-on-rails,database,Ruby On Rails,Database,作为我正在构建的应用程序的一部分,我需要存储需要执行某些操作的日期 目前,我将其存储在一个7位字符串中,每个数字对应一周中的一天。任何一天的值为1表示该动作应在当天发生,值为0表示该动作不应发生 例如,字符串0101110表示操作应在每周的星期二、星期四、星期五和星期六运行 在我的表格中,我设置了七个复选框,每个名字对应一个复选框 如何将这七个布尔结果合并为一个位字符串,以便将其保存在数据库中 您是在视图中还是在模型中执行此操作 我自己也做了一些思考,其中一个选项(在视图中)可能是在表单中设置一

作为我正在构建的应用程序的一部分,我需要存储需要执行某些操作的日期

目前,我将其存储在一个7位字符串中,每个数字对应一周中的一天。任何一天的值为1表示该动作应在当天发生,值为0表示该动作不应发生

例如,字符串0101110表示操作应在每周的星期二、星期四、星期五和星期六运行

在我的表格中,我设置了七个复选框,每个名字对应一个复选框

如何将这七个布尔结果合并为一个位字符串,以便将其保存在数据库中

您是在视图中还是在模型中执行此操作

我自己也做了一些思考,其中一个选项(在视图中)可能是在表单中设置一个隐藏字段,它是从复选框中连接/连接七个布尔值的结果。然后,复选框的值可以在提交时丢弃。我只是不太确定如何在rails中实现这一点

另一种选择是处理模型中的合并。再一次-不太确定该怎么办


感谢您的帮助,提前谢谢

将工作日的复选框值定义为模型上的虚拟属性,并在保存之前将它们连接到
挂钩上。在您的模型中:

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: [])