2017-02-22 75 views
0

我想要做的就是写东西像一个查询:说我没有使用任何WHERE子句如何在Ruby on Rails中编写连接条件?

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

通知,但我需要我的JOIN有一个条件。我无法在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哦,没错,在轨道5中有一个'left_outer_join'虽然.. –

+0

很好的知道 - 我不知道在rails 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所以你需要指定与条件加入