Ruby SEQUEL Postgres联接查询

Ruby SEQUEL Postgres联接查询,ruby,postgresql,sequel,Ruby,Postgresql,Sequel,我正在使用postgres和SEQUEL与ruby进行简单的连接查询 我有表1(短名单)中的列:id,shortname 表2(shortmembers)列:id、short_id(参考短名单id) 我想选择shortmembers id和ShortList shortname。因此,在常规SQl中,它是 SELECT shortlists.shortname, shortmembers.id WHERE shortmembers.short_id = shortlists.id 我试过了 @

我正在使用postgres和SEQUEL与ruby进行简单的连接查询

我有表1(短名单)中的列:id,shortname

表2(shortmembers)列:id、short_id(参考短名单id)

我想选择shortmembers id和ShortList shortname。因此,在常规SQl中,它是

SELECT shortlists.shortname, shortmembers.id WHERE shortmembers.short_id = shortlists.id
我试过了

@shortmembers = DB[:shortlists].join(:shortmembers, :id => :short_id) 
然后是ruby代码:

<option value="">Populated Shortlists ..</option>
        <% @shortmembers.each do |shortmember| %>
        <option value="<%= shortmember[:id] %>"><%= shortmember[:shortname] %></option>
        <% end %>
填充的短名单。。
我收到一条错误消息,这使我认为连接查询不起作用。它是:

nil:NilClass的未定义方法“each”


感谢所有的帮助

从错误消息中可以看出,
@shortmembers
在模板中是
nil
。根据之前发布的代码,它应该是一个数据集。因此,模板似乎没有在与早期代码相同的上下文/绑定中执行。

从错误消息中可以看出,
@shortmembers
在模板中是
nil
。根据之前发布的代码,它应该是一个数据集。因此,模板似乎没有在与前面代码相同的上下文/绑定中执行。

我已经找到了答案。正确的查询是:

@shortmembers=DB[:shortlist].distinct(:shortname).join(:shortmembers,:short\u id=>:id)

顺便说一句,distinct很重要,否则“shortname”的每个示例都会重复

问题不在于查询的构造,而在于shortlist表中的“id”列是integer类型,而shortmembers表中相应的short_id列是varchar类型。博士后对此感到不安。当我将short_id改为int时,没有问题


我希望这对其他人有帮助

我已经弄明白了。正确的查询是:

@shortmembers=DB[:shortlist].distinct(:shortname).join(:shortmembers,:short\u id=>:id)

顺便说一句,distinct很重要,否则“shortname”的每个示例都会重复

问题不在于查询的构造,而在于shortlist表中的“id”列是integer类型,而shortmembers表中相应的short_id列是varchar类型。博士后对此感到不安。当我将short_id改为int时,没有问题


我希望这对其他人有帮助

谢谢,我知道了。我只是想知道join查询是否正确。你认为是吗?谢谢我知道。我只是想知道join查询是否正确。你认为是吗?