1

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

我有表 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) 

然后是红宝石代码:

<option value="">Populated Shortlists ..</option>
        <% @shortmembers.each do |shortmember| %>
        <option value="<%= shortmember[:id] %>"><%= shortmember[:shortname] %></option>
        <% end %>

我收到一条错误消息,导致我认为连接查询不起作用。这是:

nil:NilClass 的未定义方法“每个”

感谢所有帮助!

4

2 回答 2

1

我已经想通了。正确的查询是:

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

作为观察,顺便提一下,不同的很重要,否则“短名称”的每个示例都会重复。

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

我希望这对其他人有帮助。

于 2013-05-29T00:23:20.897 回答
0

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

于 2013-05-28T16:50:34.527 回答