Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 这个映射器模式是如何工作的?_Ruby On Rails - Fatal编程技术网

Ruby on rails 这个映射器模式是如何工作的?

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

我找到了RailsCasts,并根据我的需要使用了这些逻辑和代码示例

但有一件事困扰着我

约束看起来像:

 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参数调用它。

向下投票的原因可能是什么?