如何在Rails中添加可变时间到Time.now(eval?)

时间:2011-04-30 16:52:48

标签: ruby-on-rails ruby ruby-on-rails-3 time eval

嗯,这似乎应该是一件简单的事情,但我似乎找不到我需要的东西。目前我有两个变量:频率和周期。频率设置为数字(例如1),句点设置为“月”或“年”。我想要做的是使用这些变量来计算从现在开始的x个月。

我已经看过1.month.from_now和1.year.from_now,但我需要的是:

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

但是我不确定使用eval,因为我是Rails / Ruby的新手,而在PHP中,使用eval通常意味着你做错了。

Rails中有eval邪恶吗?

3 个答案:

答案 0 :(得分:3)

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

您可以阅读速度here

答案 1 :(得分:0)

您只需添加自己的方法,然后使用变量计算 x月 例如:

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

答案 2 :(得分:0)

这真的只是一个红宝石问题,而不是Rails特有的。使用此:

frequency.send(period.downcase).from_now

只是在频率上调用一个名为“月”的方法。