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")

此查询仅检索“程序”表(我认为是因为“分组依据”子句)。如何从所有表(程序、programs_schedules、通道)中检索所有数据?

类程序 < ActiveRecord::Base

属于_to :channel
has_many :program_schedules

Ruby on Rails 3.2

PostgreSQL 9.2

4

1 回答 1

1

您是否正在寻找该方法提供的关联的急切加载includes

急切加载是一种查找某个类的对象和许多命名关联的方法。这是防止可怕的 1+N 问题的最简单方法之一,在该问题中,获取 100 个帖子,每个帖子都需要显示其作者会触发 101 个数据库查询。通过使用急切加载,101 个查询可以减少到 2 个。


更新:您可以通过附加到查询中
来获取 SQL 作为字符串。也可以提供帮助。.to_sql.explain

如果您想将数据作为哈希而不是模型实例获取,您可以序列化查询结果并使用以下方法包含关联.serializable_hash

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

您可以按照此处所述的相同方式定义要包含使用:except或选项的字段(其作用类似): http ://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html#method-i-as_json:only.as_json

于 2013-01-10T23:33:18.163 回答