SEQUEL Postgres加入查询

时间:2013-05-28 14:24:03

标签: ruby postgresql sequel

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

我有表1(候选名单)列:id,shortname

带有列的

和表2(shortmembers):id,short_id(对短名单id的引用)

我想选择shortmembers id和shortlists 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 %>

我收到一条错误消息,导致我假设连接查询无法正常工作。它是:

未定义的方法`each'代表nil:NilClass

感谢所有的帮助!

2 个答案:

答案 0 :(得分:1)

我已经弄清楚了。正确的查询是:

@shortmembers = DB [:shortlists] .distinct(:shortname).join(:shortmembers,:short_id =&gt;:id)

作为一种观察,顺便说一下,区别是重要的,否则每个“短名称”的例子都会重复。

问题不在于查询的构造,而是在shortlists表中的“id”列是整数类型,shortmembers表中相应的short_id列是varchar类型。 Postgres对此感到不安。当我改变short_id以输入“int”时没有问题。

我希望这有助于其他人。

答案 1 :(得分:0)

在错误消息中,模板中显示@shortmembersnil。从您发布的早期代码中,它应该是一个数据集。所以看起来模板没有在与早期代码相同的上下文/绑定中执行。