Sql 将列与Rails中ActiveRecord查询的结果合并
我在Ruby on Rails 4中有以下三个表: “决策”表: 。。。并让ActiveRecord从DecisionDatafields链接表中检索第一个决策的数据字段列表,以及相应的min_分数值 现在,上面的查询将返回如下内容:Sql 将列与Rails中ActiveRecord查询的结果合并,sql,ruby-on-rails,join,activerecord,Sql,Ruby On Rails,Join,Activerecord,我在Ruby on Rails 4中有以下三个表: “决策”表: 。。。并让ActiveRecord从DecisionDatafields链接表中检索第一个决策的数据字段列表,以及相应的min_分数值 现在,上面的查询将返回如下内容: Decision.first.datafields #<ActiveRecord::Relation [#<Datafield id: 1, title: "DF1", created_at: "2015-03-28 09:59:26", updat
Decision.first.datafields
#<ActiveRecord::Relation [#<Datafield id: 1, title: "DF1", created_at: "2015-03-28 09:59:26", updated_at: "2015-03-28 09:59:26">, #<Datafield id: 2, title: "DF2", created_at: "2015-03-28 09:59:26", updated_at: "2015-03-28 09:59:26">]>
#<ActiveRecord::Relation [#<Datafield id: 1, title: "DF1", created_at: "2015-03-28 09:59:26", updated_at: "2015-03-28 09:59:26", min_score: 5>, #<Datafield id: 2, title: "DF2", created_at: "2015-03-28 09:59:26", updated_at: "2015-03-28 09:59:26, min_score: 7">]>
#
。。。这很好,但我希望它看起来像这样:
Decision.first.datafields
#<ActiveRecord::Relation [#<Datafield id: 1, title: "DF1", created_at: "2015-03-28 09:59:26", updated_at: "2015-03-28 09:59:26">, #<Datafield id: 2, title: "DF2", created_at: "2015-03-28 09:59:26", updated_at: "2015-03-28 09:59:26">]>
#<ActiveRecord::Relation [#<Datafield id: 1, title: "DF1", created_at: "2015-03-28 09:59:26", updated_at: "2015-03-28 09:59:26", min_score: 5>, #<Datafield id: 2, title: "DF2", created_at: "2015-03-28 09:59:26", updated_at: "2015-03-28 09:59:26, min_score: 7">]>
#
不同之处在于,DecisionDatafield链接表中的min_分数已连接到查询返回的记录
谢谢 这可能有效(尚未测试):
类决策
用Decision调用它。首先,数据字段似乎以下方法有效:
Datafield.where(id: self.decision_datafields.select("datafield_id")).includes(:decision_datafields).joins("left join decision_datafields on datafields.id = decision_datafields.datafield_id").select("datafields.*, decision_datafields.min_score as min_score")
然而,当使用Rails控制台时,min_分数似乎不会添加到记录中
但是,调用
Decision.first.datafields.first.minu score
会返回一个值(通过Decision.first.datafields.first
查看记录时,它不会显示出来,谢谢,但不幸的是,它返回的内容与原始查询相同。嗯,看起来没有调用datafields
方法,而是使用默认的活动记录关系。请尝试将方法名称更改为数据字段。包括(:decision\u datafields)。选择(“datafields.*,decision\u datafields.min\u score”)。其中(id:d.decision\u datafields.select(“Datafield\u id”)。首先
它仍然没有将“min\u score”值附加到返回的记录中。
Datafield.where(id: self.decision_datafields.select("datafield_id")).includes(:decision_datafields).joins("left join decision_datafields on datafields.id = decision_datafields.datafield_id").select("datafields.*, decision_datafields.min_score as min_score")