2013-03-12 3 views
0

Я пытаюсь переписать этот старый Rails 2 вещи таким образом, что он будет работать с Rails 3.2.1:Переписывая SQL для ActiveRecord

Rails 2.2.2 запрос перезаписать

B2bPrivilege.find_by_sql("SELECT b2b_privileges.*, vendors.name AS vendor_name FROM b2b_privileges LEFT JOIN vendors ON vendors.id = b2b_privileges.vendor_id WHERE b2b_user_id = ?", current_user_id) 

Это что я придумал, и он создает тот же SQL-код, что и в примере Rails 2.2.2 выше, но он не вносит столбец vendors.name в сохраненный результат, и я не знаю почему. Сгенерированный SQL при запуске в консоли базы данных работает, поэтому проблема определенно связана с Rails.

B2bPrivilege.select("b2b_privileges.*, vendors.name AS vendor_name").joins('LEFT JOIN vendors ON vendors.id = b2b_privileges.vendor_id').where('b2b_user_id' => current_user_id) 

Debug информация от .inspect

B2bPrivilege Load (1.4ms) SELECT b2b_privileges.*, vendors.name AS vendor_name FROM "b2b_privileges" LEFT JOIN vendors ON vendors.id = b2b_privileges.vendor_id WHERE "b2b_privileges"."b2b_user_id" = 398 
[ 
    #<B2bPrivilege id: 1363, b2b_user_id: 398, vendor_id: 53, can_setup_instant_electronic_delivery: true, can_setup_purchase_orders: true, can_setup_advance_ship_notification: true, can_setup_xml_pushes: true>, 
    #<B2bPrivilege id: 1923, b2b_user_id: 398, vendor_id: 103, can_setup_instant_electronic_delivery: false, can_setup_purchase_orders: false, can_setup_advance_ship_notification: true, can_setup_xml_pushes: true> 
] 

ответ

0

ли

B2bPrivilege.joins('LEFT JOIN vendors ON vendors.id = b2b_privileges.vendor_id'). 
    where(:b2bprivileges => {'b2b_user_id' => current_user_id}). 
    select("b2b_privileges.*, vendors.name AS 'vendor_name'").first.vendor_name 
+0

Спасибо. Я попробовал вашу вариацию, и она возвращает те же результаты. Все еще отсутствует столбец из объединенной таблицы. – Slinky

+0

К сожалению, я пропустил цитаты. –

+0

Я тестировал его без кавычек и без него, и он отлично работает. Показать структуру таблиц. –

1

Оказывается, соединенном содержание там он просто не выводит на консоль, только первичное соотношение делает. Если вы просматриваете вывод в окне консоли, я думаю, что вывод консоли отражает/проверяет возвращаемый объект корневого уровня.

Это было для меня, когда я отлаживал свои запросы, которые используют объединения

Смежные вопросы