Ruby on rails 这个lambda函数如何传递给designe';什么方法有效?
关于这个问题,@user2205763建议使用lambda函数:Ruby on rails 这个lambda函数如何传递给designe';什么方法有效?,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,关于这个问题,@user2205763建议使用lambda函数: authenticated :user, lambda {|u| u.is_test } do // route stuff here end 我假设它以某种方式将:user转化为实际的designuser对象(u),但它是如何做到的?它实际上在做什么?Rails允许基于路由定义中使用约束的一组规则约束路由。请参见API文档中的示例 Deviate正在其已验证的方法中使用此功能。其来源是 authenticated方法如
authenticated :user, lambda {|u| u.is_test } do
// route stuff here
end
我假设它以某种方式将
:user
转化为实际的design
user对象(u
),但它是如何做到的?它实际上在做什么?Rails允许基于路由定义中使用约束的一组规则约束路由。请参见API文档中的示例
Deviate正在其已验证的方法中使用此功能。其来源是
authenticated
方法如下所示:
def authenticated(scope=nil, block=nil)
constraints_for(:authenticate?, scope, block) do
yield
end
end
正在为
调用约束\u:
def constraints_for(method_to_apply, scope=nil, block=nil)
constraint = lambda do |request|
request.env['warden'].send(method_to_apply, scope: scope) &&
(block.nil? || block.call(request.env["warden"].user(scope)))
end
constraints(constraint) do
yield
end
end
因此,范围
是:用户
和要应用的方法
是:验证?
和请求。env[“warden”]
是允许您检查验证的对象
这意味着约束=…
正在创建一个lambda,该lambda调用身份验证?
,然后调用您的块,例如|u | u.is_测试
,将u
设置为请求.env[“warden”]的结果。user
(即调用身份验证?
后的当前用户)
然后,该lambda作为与约束匹配的动态请求传递给,这反过来会产生//将东西路由到此处的块