【问题标题】:Get all data from all tables (Postgresql)从所有表中获取所有数据(Postgresql)
【发布时间】:2012-12-25 11:58:56
【问题描述】:
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”表(我认为是因为“group by”子句)。 如何从所有表(程序、programs_schedules、通道)中检索所有数据?

类程序 <:base>

属于:频道
has_many :program_schedules

Ruby on Rails 3.2

Postgresql 9.2

【问题讨论】:

  • 也许您应该检查(并向我们展示)生成的查询。
  • 如何打印生成的 sql 查询?
  • 我不知道。 RoR 是你的玩具。您可以随时从 postgres 日志中提取它。

标签: ruby-on-rails-3 postgresql activerecord rails-postgresql


【解决方案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])

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

【讨论】:

  • 我试过了,但我得到“#<:relation:0x007fcded83c468> 的未定义方法 `serializable_hash'”。我不知道为什么
  • 改用as_json。选项是一样的。
  • 似乎可行,但这样我就失去了所有实例方法。我怎样才能回到 ActiveRecord 实例(在 .as_json 之后)?
猜你喜欢
  • 1970-01-01
  • 2019-07-30
  • 2019-02-22
  • 2016-11-21
  • 2022-01-23
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多