gpt4 book ai didi

ruby-on-rails - Ruby on Rails 3 中的类方法——我完全迷路了!

转载 作者:数据小太阳 更新时间:2023-10-29 07:11:47 24 4
gpt4 key购买 nike

背景 here .

在上面的链接中,给出了以下示例:

class << self
def by_author(author)
where(:author_id => author.id)
end
end

除了这种语法对于像我这样的初学者来说很陌生——我一直认为类方法是用 def self.my_class_method 定义的——我在哪里可以找到关于类的文档Ruby on Rails 中的方法?

据我所知,类方法总是在类本身 (MyClass.my_class_method) 上调用,但如果 R​​ails 中的类方法是可链接的,似乎必须进行其他操作在这里!

编辑:

我想我通过对类方法的语法发表评论有点被骗了。我真的想问 Rails 如何使 类方法 可链接 — 我了解方法链接的工作原理,但不知道 Rails 如何允许您链接 类方法 而无需实际返回类链中每个“链接”之后的对象本身。

最佳答案

Ruby 中的类方法实际上只是单例类的成员,并且做 class << self涉及直接打开单例类并添加到其中,无需在每个方法定义中声明它。

article on Ruby singletons解释得很好。

至于类方法是可链接的,这不是类方法特有的东西,第二个方法调用只是在第一个方法返回的对象上调用。例如:

bar = foo.do_something.do_more

相当于:

tmp = foo.do_something
bar = tmp.do_more

在 Rails 中,这种可链接性最常用于构建 SQL 查询(例如,使用 whereorder 等)。这是实现的,因为这些方法中的每一个都返回一个 ActiveRecord Relation。 .

原因

 foo.scoped.my_foo_class_method

作品是因为 ActiveRecord::Relation#method_missing 执行以下操作:

elsif @klass.respond_to?(method)
scoping { @klass.send(method, *args, &block) }

它检查 ActiveRecord 类是否响应调用的方法,如果是,则调用它。

关于ruby-on-rails - Ruby on Rails 3 中的类方法——我完全迷路了!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5240911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com