Ruby on rails 这个映射器模式是如何工作的?
我找到了RailsCasts,并根据我的需要使用了这些逻辑和代码示例 但有一件事困扰着我 约束看起来像:Ruby on rails 这个映射器模式是如何工作的?,ruby-on-rails,Ruby On Rails,我找到了RailsCasts,并根据我的需要使用了这些逻辑和代码示例 但有一件事困扰着我 约束看起来像: constraints(Subdomain.new) do ... end 使用此代码的: class Subdomain def matches?(request) .... end end end 它是有效的 但我没有两样东西。首先,我没有在任何地方调用匹配?,为什么这个方法只是在初始化子域时执行。new 第二个问题。我没有传递任何参数,但它以某种方式将re
constraints(Subdomain.new) do ... end
使用此代码的:
class Subdomain
def matches?(request)
....
end
end
end
它是有效的
但我没有两样东西。首先,我没有在任何地方调用匹配?
,为什么这个方法只是在初始化子域时执行。new
第二个问题。我没有传递任何参数,但它以某种方式将request
参数分配给实际的机架请求,它就工作了
例如,我不喜欢这种语法:
constraints(Subdomain.new) do ... end
因此,我决定使用方法子域(请求)
创建it模块,但由于创建了it模块,它开始引发错误的数字或参数错误(0代表1)
我发现方法匹配?
是在mapper.rb
中定义的,可能是它在rails中的某个位置被向后调用,但这样它应该被我的子域文件覆盖?如果不是,因为我的匹配的是类方法,在没有应用它的任何子域实例的情况下,它是如何工作的
正如我所说,一切都很好,但我想知道到底发生了什么,因为我不喜欢使用大卫·布莱恩的魔法代码
阅读Rails mapper模块的一些源代码并没有让我理解。好吧,再多阅读一些源代码给了我一点线索。我又找到了一个匹配项?
,它是为@约束定义的
def matches?(req)
@constraints.all? do |constraint|
(constraint.respond_to?(:matches?) && constraint.matches?(req)) ||
(constraint.respond_to?(:call) && constraint.call(*constraint_args(constraint, req)))
end
end
因此,对于每个约束,它都会检查它是否响应匹配?
,然后使用rack request参数调用它。向下投票的原因可能是什么?