ActiveRecord :: Base"find_by_"方法如何工作?

jos*_*osh 2 ruby activerecord

我期待创建工作方式类似于这样的功能ActiveRecord::Basefind_by_'column_name'作品.例如,如果我做了类似的事情

User.find_by_address("1234 Apple Road")

它将通过address列查找.但我对它是如何工作感到困惑.

我看都self.prefixself.suffix当我在代码中的"动态匹配器",例如码看这里,但在我的研究,我无法找到任何东西self.prefixself.suffix为Ruby.

我该如何创建这种功能?

Aly*_*oss 5

它使用method_missing,这是Ruby在调用具有无法识别名称的方法时提供的回调.这是在Ruby中使用动态名称创建方法的标准方法.

传递给它的第一个参数是表示方法名称的Symbol,然后它接收传递给无法识别的方法的每个参数.