gpt4 book ai didi

ruby-on-rails - default_scope 为 :joins and :select

转载 作者:行者123 更新时间:2023-12-04 07:41:20 31 4
gpt4 key购买 nike

我尝试通过以下方式定义 default_scope:

default_scope :joins => :product, :select => "catalog_products.*, products.*"

不过我从 Rails 得到的是这样的:

 SELECT catalog_products.* FROM `catalog_products` INNER JOIN `products` ON `products`.id = `catalog_products`.product_id 

当我将它定义为一个 named_scope 时,一切都很好:

named_scope :extended, :joins => :product, :select => "catalog_products.*, products.*"


SELECT catalog_products.*, products.* FROM `catalog_products` INNER JOIN `products` ON `products`.id = `catalog_products`.product_id

这应该是错误还是正确的行为?

我正在使用 Rails 2.3.4。

谢谢!

最佳答案

这是预期的行为。无论您如何定义范围,您都只能获取定义范围的类的对象。尽管您正在选择关闭模型列,但 Rails 不会对它们做任何事情。但是,您可以预先加载关联。这就是您正在尝试做的事情,每次发现都有产品。

事实上它比你想象的要简单:

default_scope :include => :product

您的 select 语句是指定范围内的查询的一部分而不是默认范围内的原因是每个基于 rails 的查询都会覆盖方法链上更远的查询的选择选项。唯一对查找语句返回的内容有任何影响的 SELECT 选项是那些选择模型列子集的选项。

关于ruby-on-rails - default_scope 为 :joins and :select,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1645473/

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