Model.new轨道内的环路



我知道这是一个很短的问题。我理解"{}"代表一个循环。并且新操作员创建新的活动记录对象。

这条线路在铁轨上做什么?铅从哪里来?

Proc.new{|lead| lead.lead_details.name}

它创建新的Proc对象。在这个例子中,lead不是来自任何地方,因为这个Proc没有被调用。但是,例如,您可以调用它,将其作为块传递。

leads = Lead.includes(:lead_details) # I assume it's an AR model, obviously
p = Proc.new { |lead| lead.lead_details.name }
names = leads.map(&p)

这样一来,lead就来源于map方法,并且像对象一样表示leads数组的单个元素,它等价于:

leads.map { |lead| lead.lead_details.name }

您也可以"手动"调用此过程,显式传递参数,如下所示:

p.call(leads.first)
# => Whatever is leads.first.lead_details.name

您甚至可以将其作为块来编写自己的方法,例如:

def first_do(collection)
yield(collection.first)
end
first_do(leads, &p)
# => Whatever is leads.first.lead_details.name

最新更新