这两个范围似乎不是可链接的
scope :approved, ->{ with_stage(:approved)}
在sql中是
WHERE (pages.stage & 4 <> 0)
和
scope :with_galleries, ->{ joins("LEFT OUTER JOIN galleries ON galleries.galleriable_type = 'Brand' AND galleries.galleriable_id = page.brand_id").where("galleries.id is NOT NULL") }
此范围应仅提供具有图库的页面(每个页面都有一个品牌,每个品牌可以有许多图库)
如果我链接:with_galleries
,似乎pages
表上的其他条件都丢失了
我在做joins
错了吗?
答案 0 :(得分:1)
如果让ActiveRecord为您做更多繁重的工作,您将获得更有用的结果。特别是,如果您已正确设置关联,则应该能够编写以下内容:
scope :with_galleries, joins(brand: :galleries)
......这将产生适当的可链接范围。
这取决于两个关联,一个从您的页面模型到品牌:
&#39; belongs_to:brand&#39;
和一个从品牌到画廊::
has_many :galleries, as: :galleriable
我从您撰写的查询中推断出您的模型设置,所以我可能猜错了。但这里的基本原则是声明你的关联并让ActiveRecord构造查询(除非你的查询是非常不寻常的,你的查询不是 - 你只是过滤取决于是否有相关的记录,一个常见的操作)。
答案 1 :(得分:0)
您需要使用Arel构建第二个范围。最简单的方法是制作您希望第二个范围表示的完整SQL语句,然后将其粘贴到http://www.scuttle.io/
中