2013-05-28 4 views
1

Я борюсь с простым запросом соединения, используя postgres и SEQUEL с ruby.SEQUEL Postgres join query

У меня есть таблица 1 (короткие списки) со столбцами: ID, ShortName

и таблицы 2 (shortmembers) со столбцами: идентификатор, short_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 %> 

Я получаю сообщение об ошибке, которое приводит меня к предположим, присоединиться запрос не работает. Это:

неопределенный метод `каждый» для ноль: NilClass

Все помощь с благодарностью получил!

ответ

0

Из сообщения об ошибке, похоже, что @shortmembers is nil в вашем шаблоне. Из предыдущего кода, который вы опубликовали, это должен быть набор данных. Таким образом, похоже, что шаблон не выполняется в том же контексте/привязке, что и предыдущий код.

+0

Спасибо, что понимаю. Мне просто интересно, правильный ли запрос соединения. Как вы думаете, это так? – user1903663

1

Я понял это. Правильный запрос:

@shortmembers = DB [:] .distinct коротких списков (: ShortName) .join (: shortmembers,: short_id =>: идентификатор)

В качестве наблюдения, попутно, различны имеет важное значение иначе каждый пример «shortname» будет повторяться.

Проблема заключалась не в построении запроса, а в столбце «id» в таблице коротких списков было целочисленное значение типа, а соответствующий столбец short_id в таблице коротких сообщений был varchar. Postgres расстроился из-за этого. Когда я изменил short_id, введите «int» никаких проблем.

Надеюсь, это поможет кому-то еще.