Как добавить переменное время в Time.now в Rails (eval?) - PullRequest
0 голосов
/ 30 апреля 2011

Ну, похоже, это должно быть просто, но я не могу найти то, что мне нужно. В настоящее время у меня есть две переменные: частота и период. частота установлена ​​на число (например, 1), а период - на «месяц» или «год». То, что я хочу сделать, это использовать эти переменные для расчета х месяцев с этого момента.

Я видел 1.month.from_now и 1.year.from_now, но мне нужно что-то вроде:

eval("#{frequency}.#{period.downcase}.from_now")

но я не уверен насчет использования eval, так как я новичок в Rails / Ruby и в PHP использование eval обычно означает, что вы делаете что-то не так.

Является ли eval злом в Рельсах?

Ответы [ 3 ]

3 голосов
/ 30 апреля 2011

eval довольно медленный. Вы можете использовать Object # send :

irb(main):003:0> frequency = 1
irb(main):004:0> period = "month"
irb(main):005:0> frequency.send(period).from_now
=> Mon, 30 May 2011 16:57:12 UTC +00:00

А про скорость вы можете прочитать здесь .

0 голосов
/ 30 апреля 2011

Это действительно просто вопрос по рубину, а не по конкретным Rails.Используйте это:

frequency.send(period.downcase).from_now

, который просто вызывает метод с именем "month" of "year" по частоте.

0 голосов
/ 30 апреля 2011

Вы можете просто добавить свой собственный метод и использовать свои переменные для вычисления x месяца из , например:

def my_x_month(period,frequency)
  case period
   when "month"
    period.month.from_now
   when "year"
    period.year.from_now
  end
end
...