我有一些reocure的模型,它有频率,应该在它自己的创建上创建几个记录。 我正在尝试将整数频率(1,7,30)转换为(天,周,月)的函数,因此我可以将其添加到新记录中。
我尝试使用日期函数的哈希来实现它,以便像date+i.months()
一样使用它:
date_hash={1=>days(), 7=>weeks(), 30=>months()}
但我收到了错误。
它应该在循环内部使用:
some_number.times do |i|
Record.create({...., :date => start_date+i.(date_hash[frequency]),....})
end
我收到了这个错误:
undefined method `days' for # <MyController:0x111111>
感谢您的协助。
答案 0 :(得分:1)
你在这里有很多非Ruby。 Ruby并没有像你期望的那样提供一流的函数(date()
会将该键的值赋给调用本地范围内可用的一些名为date
的函数的结果。 ,你不能像这样调用变量方法名称。在Ruby中,对象(接收器)的方法调用是发送到接收器的消息,带有可选参数。您调用此类内容的典型方法是使用Object#send
并使用所需的方法名称:
methods = {1 => :days, 7 => :weeks, 30 => :months}
x.send(methods[1]) # Calls x#days
然而,您的代码的意图相当不明确,并且可能有一种更好的方法来做您想要的事情。