gpt4 book ai didi

ruby-on-rails - Rails 2.3.x - 这个 ActiveRecord 作用域是如何工作的?

转载 作者:行者123 更新时间:2023-12-03 15:58:44 25 4
gpt4 key购买 nike

我正在处理的项目中有一个 named_scope,如下所示:

 # default product scope only lists available and non-deleted products
::Product.named_scope :active, lambda { |*args|
Product.not_deleted.available(args.first).scope(:find)
}

最初的 named_scope 是有道理的。这里令人困惑的部分是 .scope(:find) 是如何工作的。这显然是在调用另一个命名范围(not_deleted),然后应用 .scope(:find) 。什么/如何 .scope(:find) 在这里工作?

最佳答案

快速回答

Product.not_deleted.available(args.first)

是一个命名范围本身,由两个命名范围组合而成。
scope(:find)获取命名范围(或范围组合)的条件,您可以反过来使用它来创建新的命名范围。

举个例子:
named_scope :active,      :conditions => 'active  = true' 
named_scope :not_deleted, :conditions => 'deleted = false'

然后你写
named_scope :active_and_not_deleted, :conditions => 'active = true and deleted = false'

或者,你可以写
named_scope :active_and_not_deleted, lambda { self.active.not_deleted.scope(:find) }

这是相同的。我希望这能说清楚。

请注意,这在 rails 3 中变得更简单(更干净),您只需编写
scope :active_and_not_deleted, active.not_deleted

关于ruby-on-rails - Rails 2.3.x - 这个 ActiveRecord 作用域是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4764065/

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