2017-02-22 4 views
0

, что я пытаюсь сделать, это написать что-то вроде следующего запроса:Как написать условие соединения в Ruby on Rails?

SELECT * 
FROM Customers c 
LEFT JOIN CustomerAccounts ca 
    ON ca.CustomerID = c.CustomerID 
    AND c.State = 'NY' 

Обратите внимание, что я не использую любой ИНЕКЕ, но мне нужно мое РЕГИСТРИРУЙТЕСЬ есть условие. Я не могу заставить его работать в Ruby on Rails.

Можете ли вы мне помочь?

+0

вы получите это работает? –

ответ

0

Ваш SQL-код, переведенный в ActiveRecord, будет выглядеть следующим образом (с использованием joins):

Customer.where(state: 'NY').joins(:customer_accounts) 

код предполагает, у вас есть ассоциация создана:

class Customer 
    has_many :customer_accounts 
end 
+0

Это выполнит 'INNER JOIN', а не' LEFT JOIN' - это может быть не совсем тот же запрос. – eugen

+0

@eugen oh, правильно, есть «left_outer_join' в рельсах 5, хотя .. –

+0

Полезно знать - я не знал, что было изменено в рельсах 5! – eugen

0

Вы можете присоединиться к таблицы с LEFT JOIN. Просто передайте условие соединения в joins и вы получите ожидаемый результат

Customer.joins("LEFT JOIN CustomerAccounts 
       ON CustomerAccounts.CustomerID = Customers.CustomerID 
       AND Customers.State = 'NY'") 

#=> SELECT * FROM Customers LEFT JOIN CustomerAccounts ON CustomerAccounts.CustomerID = Customers.CustomerID AND Customers.State = 'NY' 

Примечание: только .joins() делает INNER JOIN поэтому вам нужно указать присоединиться с условием

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