我正在努力使用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
感谢所有的帮助!
答案 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)
在错误消息中,模板中显示@shortmembers
为nil
。从您发布的早期代码中,它应该是一个数据集。所以看起来模板没有在与早期代码相同的上下文/绑定中执行。