簡體   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