繁体   English   中英

带有连接的Rails named_scopes

[英]Rails named_scopes with joins

我正在尝试创建一个使用联接的named_scope,但是尽管生成的SQL看起来正确,但结果是垃圾。 例如:

class Clip < ActiveRecord::Base      
  named_scope :visible, {
    :joins => "INNER JOIN series ON series.id = clips.owner_id INNER JOIN shows on shows.id = series.show_id", 
    :conditions=>"shows.visible = 1 AND clips.owner_type = 'Series' "
  }

(剪辑由一个系列拥有,一个系列属于一个表演,一个表演可以是可见的也可以是不可见的)。

Clip.all可以:

SELECT * FROM `clips` 

Clip.visible.all可以:

SELECT * FROM `clips` INNER JOIN series ON series.id = clips.owner_id INNER JOIN shows on shows.id = series.show_id WHERE (shows.visible = 1 AND clips.owner_type = 'Series' ) 

看起来还好 但是,由此产生的Clip模型数组包括一个ID不在数据库中的Clip,而是使用了一个Show ID。 我要去哪里错了?

问题是“ SELECT *”-查询从剪辑,系列和显示中按该顺序选取所有列。 每个表都有一个id列,并导致结果中命名列之间的冲突。 从显示中撤回的最后一个id列将覆盖您想要的列。 您应该将:select选项与:joins一起使用,例如:

named_scope :visible, {
  :select => "episodes.*",
  :joins => "INNER JOIN series ON series.id = clips.owner_id INNER JOIN shows on shows.id = series.show_id", 
  :conditions=>"shows.visible = 1 AND clips.owner_type = 'Series' "
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM