SEQUEL Запрос соединения Postgres

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

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

и таблица 2 (shortmembers) со столбцами: id, short_id (ссылки на id коротких списков)

Я хочу выбрать идентификатор Shortmembers и 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

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


person user1903663    schedule 28.05.2013    source источник


Ответы (2)


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

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

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

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

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

person user1903663    schedule 29.05.2013

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

person Jeremy Evans    schedule 28.05.2013
comment
Спасибо я это понимаю. Мне просто интересно, правильный ли запрос на соединение. Как вы думаете, это так? - person user1903663; 29.05.2013