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

发布于 2024-11-04 09:55:15 字数 365 浏览 1 评论 0原文

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

我看过 1.month.from_now 和 1.year.from_now 但我需要的是这样的:

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

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

Rails 中的 eval 是邪恶的吗?

Well this seems like it should be a simple thing but I can't seem to find what I need. Currently I have two variables: frequency and period. frequency is set to a number (eg 1) and period is set to "month" or "year". What I want to do is is use these variables to calculate x months from now.

I've seen the 1.month.from_now and 1.year.from_now but what I need is something like:

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

but I'm not sure about the use of eval as I'm new to Rails/Ruby and in PHP the use of eval usually means you're doing something wrong.

Is eval evil in Rails?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

可是我不能没有你 2024-11-11 09:55:15

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

您可以阅读有关速度此处

eval is pretty slow. You can use 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

And you can read about the speed here.

请恋爱 2024-11-11 09:55:15

您只需添加自己的方法并使用变量来计算您的x 月份
例如:

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

You can simply add your own method and use your variables to calculate your x month from
for example:

def my_x_month(period,frequency)
  case period
   when "month"
    period.month.from_now
   when "year"
    period.year.from_now
  end
end
放肆 2024-11-11 09:55:15

这实际上只是一个 ruby​​ 问题,而不是 Rails 特有的问题。使用这个:

frequency.send(period.downcase).from_now

简单地调用一个名为“年”的“月”的方法。

It's really just a ruby question, not Rails specific. Use this:

frequency.send(period.downcase).from_now

that simply invokes a method called "month" of "year" on frequency.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文