Я пытаюсь переписать этот старый 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>
]
Спасибо. Я попробовал вашу вариацию, и она возвращает те же результаты. Все еще отсутствует столбец из объединенной таблицы. – Slinky
К сожалению, я пропустил цитаты. –
Я тестировал его без кавычек и без него, и он отлично работает. Показать структуру таблиц. –