【问题标题】:ruby on rails includes not working to get data for has_many associationruby on rails 包括无法获取 has_many 关联的数据
【发布时间】:2016-01-07 07:31:27
【问题描述】:

我创建了两个具有以下定义的模型

class TrendGraph < ActiveRecord::Base
  acts_as_paranoid
  has_many :trends
end


class Trend < ActiveRecord::Base
  acts_as_paranoid
end

现在我正在尝试提取每个图表的数据以及相关的趋势数据。我正在使用以下查询

@trendGraphs =    TrendGraph.where("column=?",@someValue).all.includes(:trends)

但我在@trendGraphs 中得到的只是趋势图表数据,而不是趋势表中的相关数据。我需要的是下面的东西

TrendGraphData1:{key1:"value1",key2:"value2",trends:[{trendk1:"trendvalue1"},{trendk2:"trendvalue2"}]}

我能够使用 laravel 中的 with 子句来实现这一点,并且只是从 laravel 转移到 ROR 。谁能帮我告诉我做错了什么以及如何实现?

提前致谢。

【问题讨论】:

  • 您可以使用@trendGraph.trends 访问您的图表,使用trendGraph 集合的项目,但是如果您想要此数据的另一种表示,可能您需要找到其他ORM 模式,例如DAO,或者您一些一种序列化器。因为 AR,正如有人说的反模式,所以对它的查询将只返回该模型表的行
  • 我可以使用@trendGraphs.trends 访问它们,但是有没有办法可以将趋势表中的所有相关数据作为嵌入到 TrendGraph AR 对象中的集合来获取?或者正如你所说,我需要使用一些 ORM 模式来实现这一点?
  • 你可以创建一个像@trendGraph.to_json(include: :trends)这样的json对象。但是对于复合 AR 对象,您需要使用 sth else

标签: ruby-on-rails ruby ruby-on-rails-4 rails-activerecord model-associations


【解决方案1】:

尝试添加

belongs_to :trend_graph

在你的 Trend 班级中

【讨论】:

    【解决方案2】:

    你可以这样做:

    @trend_graphs = TrendGraph.where(column: @someValue).all.includes(:trends).as_json(include: :trends)

    【讨论】:

    • 有没有一种方法可以在不使用 as_json 的情况下使用(包括::趋势)?我只是收集集合,最后我使用 :json 方法将它们发送到视图!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    相关资源
    最近更新 更多