Ruby on rails 这个lambda函数如何传递给designe';什么方法有效?

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方法如

关于这个问题,@user2205763建议使用lambda函数:

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作为与
约束匹配的动态请求传递给
,这反过来会产生
//将东西路由到此处
的块