红宝石时间和变量的比较

Gar*_*ows 2 ruby ruby-on-rails

我有两个模型,一个是Employee和一个WorkingPattern.Employee的一个实例belongs_to一个工作模式.

工作模式看起来像这样

        :id => :integer,
      :name => :string,
       :mon => :boolean,
       :tue => :boolean,
       :wed => :boolean,
       :thu => :boolean,
       :fri => :boolean,
       :sat => :boolean,
       :sun => :boolean
Run Code Online (Sandbox Code Playgroud)

我需要知道员工今天是否应该上班.因此,如果今天是星期二,并且该员工的工作模式记录报告:tue = true然后返回true,等等.我没有选择重命名WorkingPattern模型上的字段以匹配日期名称.

我知道

Time.now.strftime("%A")
Run Code Online (Sandbox Code Playgroud)

将返回当天的名称.然后我发现我可以通过这样做获得字符串的前3个字符

Time.now.strftime("%A")[0,3]
Run Code Online (Sandbox Code Playgroud)

所以现在我把"Tue"作为字符串返回.添加一个小写

Time.now.strftime("%A")[0,3].downcase
Run Code Online (Sandbox Code Playgroud)

现在我有了"tue",它匹配了WorkingPattern上的符号:tue.

现在我需要一种在正确的日期检查字符串的方法,理想情况是这并不意味着每个员工对数据库进行7次查询!

任何人都可以建议吗?

ush*_*sha 5

您可以使用%a缩写的工作日名称.并用于send动态调用方法

employee.working_pattern.send(Time.now.strftime("%a").downcase)
Run Code Online (Sandbox Code Playgroud)