2012-10-12 27 views
0

假設我想做ActiveRecord的發現與複合加入

SELECT persons.name, cars.registration FROM persons, cars 
    WHERE persons.state=cars.state AND persons.state_id_number=cars.owner_id_number ; 

提示:人們在不同的國家可以有相同的state_id_number,但它是一個國家內是唯一的。

我可以做

People.find_by_sql("SELECT persons.name, cars.registration FROM persons, cars 
    WHERE persons.state=cars.state AND persons.state_id_number=cars.owner_id_number") 

獲得的記錄列表。

但是我可以使用find(:all, :conditions => {格式來做同樣的事情嗎?

回答

0
class Person < ActiveRecord::Base 
    has_many :cars, 
     :foreign_key => "owner_id_number", 
     :primary_key => "state_id_number", 
     :conditions => "persons.state = cars.state" 
end 

class Car < ActiveRecord::Base 
    belongs_to :person, 
     :foreign_key => "owner_id_number", 
     :primary_key => "state_id_number", 
     :conditions => "persons.state = cars.state" 
end 

Person.includes(:cars) 
+0

它需要':條件=> PROC {「 cars.state =#{self.state}「}' – highBandWidth

1

假設你有關聯:汽車設置

People.joins(:cars).where("persons.state=cars.state AND persons.state_id_number=cars.owner_id_number").all 

不會完全一樣,但它應該是接近