我有一个名为UserPrice
的模型,其中有一个表单,您可以一次创建多个UserPrice's
。我有一个名为:all_dates
的虚拟属性,它假设更新我的UserPrice
模型的另一个date_select字段:purchase_date
,但由于它没有正确地完成其工作,我需要对此进行详细说明方法在这里我可以让它工作:
def save_all_dates_to_user_prices
if !self.all_dates.nil?
self.user_prices.each {|up| up.purchase_date = self.all_dates if up.new_record?}
end
end
我会开始:
我定义了方法save_all_dates_to_user_prices
我的UserPrice模型中的before_save
。
if !self.all_dates.nil?
表示正在检查UserPrice.all_dates属性是否为空(nil?)。
这是我迷路的地方;不确定这一行:
self.user_prices.each {|up| up.purchase_date = self.all_dates if up.new_record?}
|up|
,self.user_prices.each
代表什么?self.user_prices.each
=包裹在{}
(哈希)中的任何内容?在回答上面提到的问题时,有人可以填写/更正有关此方法的详细信息吗?
谢谢,我是Rails和Ruby的新手,试图在编写代码时学习。
答案 0 :(得分:3)
each
是Enumerable类的一种方法,Array和Hash都实现了该方法。它将一个块作为参数,并将其简单地应用于Enumerable的所有元素。所以你要问的那句话翻译成这样:
为user_prices
的每一个,如果是all_dates
purchase_date
分配给user_price
up
只是一个引用当前Enumerale元素的变量。
答案 1 :(得分:2)
这是一段笨拙的Ruby代码,所以这里有一个细分,稍作重写:
def save_all_dates_to_user_prices
# If all_dates is defined...
if (self.all_dates)
# ...then for each entry in user_prices hereby called 'up'...
self.user_prices.each do |up|
# ...check if this is a new record...
if (up.new_record?)
# ...and assign the purchase_date
up.purchase_date = self.all_dates
end
end
end
end
如果您熟悉JavaScript,那么Ruby中的x.each { |y| ... }
与使用jQuery的JavaScript中的x.each(function(y) { ... })
类似。垂直条内的变量表示两种情况下该功能块的参数。