在Ruby on Rails上获取对象中的日名称

在Ruby on Rails上获取对象中的日名称,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我试图在一个对象中获取当前日期的名称,然后用它来执行基本计算。目前正在兜圈子 我有如下一些属性: @location.monday_on @location.monday_off @location.tuesday_on ..... 我用这些来计算Time.now是否在范围内: (@location.monday_on.to_i..@location.monday_off.to_i).include? Time.now.hour 那很好。然而,我想让事情干涸,并尝试了以下方法: st

我试图在一个对象中获取当前日期的名称,然后用它来执行基本计算。目前正在兜圈子

我有如下一些属性:

 @location.monday_on
 @location.monday_off
 @location.tuesday_on
 .....
我用这些来计算Time.now是否在范围内:

(@location.monday_on.to_i..@location.monday_off.to_i).include? Time.now.hour
那很好。然而,我想让事情干涸,并尝试了以下方法:

start = "@location.#{Time.now.strftime('%A').downcase}_on".constantize
finish = "@location.#{Time.now.strftime('%A').downcase}_off".constantize

(start.to_i..finish.to_i).include? Time.now.hour
但是,这给出了一个错误的常量名称。他在抓救命稻草

获取对象中当前日期的名称以便在查找中使用的最佳方法是什么?

大致如下:

@location.send("#{Time.now.strftime('%A').downcase}_on".to_sym)
然而,至少,该功能应该被包装在任何类
@location
中,否则主线代码就会被不相关的代码弄乱

我可能已经将这些函数的结果封装在一个散列或数组中,并传入一个日名称或道号。如果在DSL或其他面向用户的工件中使用特定于日期的方法,那么创建这些方法很好,否则我不相信它们的实用性。

大致上:

@location.send("#{Time.now.strftime('%A').downcase}_on".to_sym)
然而,至少,该功能应该被包装在任何类
@location
中,否则主线代码就会被不相关的代码弄乱

我可能已经将这些函数的结果封装在一个散列或数组中,并传入一个日名称或道号。如果在DSL或其他面向用户的工件中使用特定于日期的方法,那么创建这些方法很好,否则我不相信它们的实用性。

仅仅因为你可以使用元编程并不意味着你应该这样做。元编程很有趣,在某些情况下可以帮助您编写更可读的代码,但是,正如您的示例所示,它可能会导致看起来可怕的数据驱动代码。老实说,通过查看代码,我甚至不能确定我是否理解您正在尝试做什么

但是,一般来说,由于所有的特殊情况,日期算法非常困难。甚至Ruby也不完全支持它,因为它太难了。但即使Ruby对“夏季”一无所知,你最好还是以
Date
DateTime
为基础,而不是自己动手

一般来说,您不应该试图在计算中使用日期名称。相反,使用日数(即工作日为0..6),并仅在必要时使用类似于
Date::DAYNAMES[weekday]
的内容将其转换为字符串。然后您可以使用类似于
@location.wday==DateTime.now.wday

的东西,因为您可以使用元编程并不意味着您应该这样做。元编程很有趣,在某些情况下可以帮助您编写更可读的代码,但是,正如您的示例所示,它可能会导致看起来可怕的数据驱动代码。老实说,通过查看代码,我甚至不能确定我是否理解您正在尝试做什么

但是,一般来说,由于所有的特殊情况,日期算法非常困难。甚至Ruby也不完全支持它,因为它太难了。但即使Ruby对“夏季”一无所知,你最好还是以
Date
DateTime
为基础,而不是自己动手


一般来说,您不应该试图在计算中使用日期名称。相反,使用日数(即工作日为0..6),并仅在必要时使用类似于
Date::DAYNAMES[weekday]
的内容将其转换为字符串。然后你可以使用类似于
@location.wday==DateTime.now.wday

的东西,这很酷,我不知道你能做到。我也同意你关于特定日期方法的评论。我不喜欢把14个属性作为一天中的基本时间调度器。我正在使用jquery范围滑块中的字段-您认为使用哈希更好吗?@simonmorley哈希或数组更可取,以道琼斯指数为索引。我可能会将这些值保留为时间,而不是一个简单的整数小时。数组或散列可以存储为序列化字段,也可以使用AR关系。我对jQuery的范围滑块了解不够,不知道什么是“最佳”选项。谢谢,感谢@dave newton的帮助。我也不熟悉jquery,只是在尝试学习它——我正在使用其他人的javascript来适应现有的应用程序,这会带来问题。我将试验你的建议。干杯,西蒙。很酷,我不知道你能做到。我也同意你关于特定日期方法的评论。我不喜欢把14个属性作为一天中的基本时间调度器。我正在使用jquery范围滑块中的字段-您认为使用哈希更好吗?@simonmorley哈希或数组更可取,以道琼斯指数为索引。我可能会将这些值保留为时间,而不是一个简单的整数小时。数组或散列可以存储为序列化字段,也可以使用AR关系。我对jQuery的范围滑块了解不够,不知道什么是“最佳”选项。谢谢,感谢@dave newton的帮助。我也不熟悉jquery,只是在尝试学习它——我正在使用其他人的javascript来适应现有的应用程序,这会带来问题。我将试验你的建议。干杯,西蒙。你只是想知道今天是某一天还是
周一开着
周一关着
比这更复杂?你能不使用和朋友吗?你只是想知道今天是某一天还是
monday\u on
monday\u off
比这更复杂?你能用数字代替名字吗。边走边学。SI认为该代码本质上是由定义驱动的数据,因为它依赖于数据来做出决策,问题是输入值封装在方法名称中。意图很清楚——是包含在今天的时间开/关范围内的当前小时。我对“日名v”很矛盾。由于道琼斯指数是一对一的转换,所以总体上看,道琼斯指数是一对一。(不过,我并不完全赞同反对票;这与我的答案基本相同,只是