我正在努力使用postgres和SEQUEL与ruby进行简单的连接查询。
我有表1(短列表),其中包含以下列: id、短名称
和表2(短成员),列: id、short_id (引用短列表的id )
我想选择短成员id和短名单短名称。因此,在常规的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的未定义方法‘`each’
感谢大家的帮助!
发布于 2013-05-29 08:23:21
我已经弄明白了。正确的查询是:
@shortmembers = DB:shortlists.distinct(:shortname).join(:shortmembers,:short_id => :id)
作为观察,顺便说一下,distinct很重要,否则每个“短名称”的例子都会重复。
问题不在于查询的构造,而在于shortlists表中的"id“列是integer类型,而shortlists表中相应的short_id列是varchar类型。Postgres对此感到不安。当我将short_id更改为"int“类型时,没有问题。
我希望这对其他人有帮助。
发布于 2013-05-29 00:50:35
从错误消息中可以看出,您的模板中的@shortmembers为nil。根据您发布的早期代码,它应该是一个数据集。因此,该模板看起来不是在与前面代码相同的上下文/绑定中执行的。
https://stackoverflow.com/questions/16794547
复制相似问题