0
data = Program.joins(:program_schedules, :channel). 
     where(
     "program_schedules.start" => options[:time_range], 
      "programs.ptype" => "movie", 
      "channels.country" => options[:country]). 
     where("programs.official_rating >= ?", options[:min_rating]). 
     group("programs.id"). 
     order("programs.popularity DESC") 

此查詢只檢索「程序」表(我認爲是因爲「group by」子句)。 如何從所有表格(程序,programs_schedules,通道)中檢索所有數據?獲取所有表(Postgresql)的所有數據

類節目<的ActiveRecord ::基地

belongs_to的:通道
的has_many:program_schedules

Ruby on Rails的3.2

PostgreSQL的9.2

+0

也許你應該檢查(向我們展示)生成的查詢。 – wildplasser

+0

如何打印生成的sql查詢? – sparkle

+0

我不知道。 RoR是你的玩具。你總是可以從postgres日誌中取出它。 – wildplasser

回答

1

您是否在尋找includes方法提供的eager loading of associations

預加載是一種查找某個類的對象和一些命名關聯的方法。這是防止可怕的1 + N問題最簡單的方法之一,其中獲取100個帖子,每個帖子需要顯示他們的作者觸發器101數據庫查詢。通過使用預先加載的,在101個查詢可降至2


更新:
您可以通過附加.to_sql到查詢獲得SQL作爲一個字符串。 .explain也可以提供幫助。

如果你想要得到的數據作爲哈希並沒有更多的爲模型的情況下,可以序列查詢的結果,包括使用.serializable_hash協會:

data.serializable_hash(include: [:program_schedules, :channel]) 

您可以定義哪些字段包括使用這裏描述爲.as_json以同樣的方式:except:only選項(作用類似): http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html#method-i-as_json

+0

我試過了,但是我得到了#「的未定義方法'serializable_hash'。我不明白爲什麼 – sparkle

+0

請嘗試'as_json'。選項是相同的。 –

+0

似乎有用,但是這樣我就失去了所有的實例方法。我如何回到ActiveRecord實例(.as_json之後)? – sparkle