2011-01-12 48 views
0

看來,如果查詢是在Ruby on Rails中,如何通過SQL獲取連接結果?

Product.find_by_sql("select * from products INNER JOIN order_entries ... ") 

那麼對象的回報將是產品的對象,而

OrderEntry.find_by_sql("select * from products INNER JOIN order_entries ... ") 

將返回訂單條目對象。有沒有辦法返回聯合結果?原因是產品中的一個字段以及最終加入結果中需要OrderEntry的一個字段。謝謝。

回答

3

我不確定具體的細節級別,但通常當我必須以這種方式執行Join時,我可以直接從結果對象中引用連接的字段。例如,在一個項目中,一個客戶可以多次預訂:

customer = Customer.first 
=> #<Customer id:1 ...> 
customer.date 
=> NoMethod Error (this is a Reservation method) 

但是......

customer = Customer.find_by_sql("select * FROM customers INNER JOIN reservations ON customers.id = reservations.customer_id").first 
=> #<Customer id:1 ...> #looks the same, but isn't 
customer.date 
=> "2010-12-24" 

爲什麼,我不知道,但對象響應聯接字段。我搜索了一分鐘,想知道如何區分一個普通對象和一個帶有連接字段的對象,但無法弄清楚。對不起,在思想&響應,但晚點簡潔...

+0

您的回答真的讓我感到驚訝。我不知道這樣的事情會起作用。 +1,但看起來它不會幫助@動靜能量,因爲他擁有一對多的關係。 – klew 2011-01-13 00:33:46

1

如果指定的列名(他們也不含糊),你可以直接檢索屬性:

sql = "select products.name, order_entries.description \ 
    FROM products INNER JOIN order_entries ON products.id=order_entries.product_id" 
result_set = Product.find_by_sql(sql) 

這將返回數組只有選定列的對象。您現在可以使用列名而無需通過關聯:

result = result_set.first 
result.name # "Widget" 
result.description # "Best seller!" 
相關問題