以下是a method described in the Rails API:
scope(name, body, &block)
这是使用Rails API中描述的方法的一个示例:
class Shirt < ActiveRecord::Base
scope :red, -> { where(color: 'red') } do
def dom_id
'red_shirts'
end
end
end
问题是关于以下代码:
do
def dom_id
'red_shirts'
end
end
它代表什么?我无法找到任何关于块的Ruby语法可以遵循lambda。我错过了什么?谢谢你的帮助。
答案 0 :(得分:2)
在您的示例中,lambda是scope
的第二个常规参数,块是scope
的块参数(与lambda语法无关)。
The block lets you define what ActiveRecord calls "extensions",可以在关联的返回值上调用的方法。您的示例中定义的方法将像这样调用:
Shirt.red.dom_id
has_many
associations can be extended in the same way.这个例子有点奇怪,因为它与视图层有关;扩展程序更常用于查找程序和创建者之类的内容。
答案 1 :(得分:1)
dom_id id作为范围的方法,你可以调用Shirt.red.dom_id但你不能调用Shirt.dom_id。有时您需要仅属于给定范围的方法
答案 2 :(得分:1)
我想我遇到了问题。
def testLambdaParams(name,body)
puts name
body.call
yield "testLambdaParams_yield" if block_given?
end
second_proc = -> do
puts "second_proc"
yield 'second_proc' if block_given?
end
testLambdaParams "first_params",second_proc do |x|
puts "block exec for testLambdaParams " + x
end
结果:
first_params
second_proc
block exec for testLambdaParams testLambdaParams_yield
最后一个区块用于testLambdaParams
, 用于 lambda 。