活动记录如何在加入后指定列?

时间:2015-07-20 17:16:16

标签: ruby-on-rails activerecord

我正在尝试使用activerecord进行sql查询,而我很难从多个连接表中指定特定列。

例如在sql

select go.id, sequence.name, sequence.id from sequence join (goterms,...) on ...

这不是很漂亮的sql,但我的意思是我能够指定哪个.id我想要返回

在activerecord中我这样做:

results = Sequence.joins(:Foreigndb,:Goterm,:Taxa)
.select(:header,:taxaclass, :genus, :interpro_desc,:description,:dbname,:read_depth, :name)
.distinct

我希望能够获取id:Goterm但是:Taxa和:Foreigndb也使用id作为数据库中的列,所以当我执行以下操作时,我会得到无法解释的错误,我认为这些错误源于此问题。 / p>

results = Sequence.joins(:Foreigndb,:Goterm,:Taxa)
.select(:header,:taxaclass, :genus, :interpro_desc,:description,:dbname,:read_depth, :name,:id)
.distinct

指定我想要Goterm.id的正确方法是什么?

编辑 - 这是错误:
    ActiveRecord :: StatementInvalid:Mysql2 :: Error:'字段列表'中的未知列'Goterm.id'

我跑的时候:     results = Sequence.joins(:Foreigndb,:Goterm,:Taxa).select(:header,:taxaclass,:genus,:interpro_desc,:description,:dbname,:read_depth,:name,'Goterm.id')。limit (5).offset(0).dresults = Sequence.joins(:Foreigndb,:Goterm,:Taxa).select(:header,:taxaclass,:genus,:interpro_desc,:description,:dbname,:read_depth,:name 'Goterm.id')。极限(5).offset(0).distinct

2 个答案:

答案 0 :(得分:0)

results = Sequence.joins(:Foreigndb,:Goterm,:Taxa).select(:header,:taxaclass, :genus, :interpro_desc,:description,:dbname,:read_depth, :name, 'sequences.id')
.distinct

答案 1 :(得分:0)

事实证明,ilan的答案是正确的,但要确保一切都是小写的。当我需要'goterm.id'时,我正在使用'Goterm.id'进行选择

如果有其他人遇到此问题,我也遇到了从返回的查询对象中获取goterm.id数据的困难。每次我在返回集上调用object.id时,它会给我一些与我期望的不同的东西。我认为我期待的属性被别的东西遮挡了。为了获得我需要的数据,我做了以下工作:

results = Sequence.joins(:Foreigndb,:Goterm,:Taxa).select(:header,:taxaclass, :genus,:interpro_desc,:description,:dbname,:read_depth, :name).distinct
firstRes = results[0]
firstRes.attributes['id']