Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 名为_的Rails作用域与连接_Ruby On Rails_Ruby_Activerecord_Named Scope - Fatal编程技术网

Ruby on rails 名为_的Rails作用域与连接

Ruby on rails 名为_的Rails作用域与连接,ruby-on-rails,ruby,activerecord,named-scope,Ruby On Rails,Ruby,Activerecord,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=>"show

我试图创建一个使用联接的命名范围,但尽管生成的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.visible.all执行以下操作:

SELECT * FROM `clips` 
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' ) 
这看起来不错。但是,生成的剪辑模型数组包含一个ID不在数据库中的剪辑,它取而代之的是一个show ID。我哪里出错了?

这是一个错误:

问题在于“选择*”—查询将按照该顺序从剪辑、系列和显示中选取所有列。每个表都有一个id列,这会导致结果中的命名列之间发生冲突。(从显示中)向后拉的最后一个id列将覆盖所需的id列。您应该将:选择选项与:联接一起使用,如:

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' "
}