2014-04-09 128 views
2

railscast #37他們顯示了一個簡單的搜索,我試圖實現。我有以下關聯:Rails搜索查詢相關模型

class Owner < ActiveRecord::Base 
    has_many :dogs 
end 

class Dog < ActiveRecord::Base 
    belongs_to :owner 
end 

狗模型有一個屬性「名稱」,所有者也是如此。我需要能夠過濾狗列表,如果您輸入「Fido」(狗)或「Bob」(所有者),Fido將出現在列表中。下面是搜索當前如何設置:

模型dog.rb:

def self.search(search) 
    if search 
     find(:all, :conditions => ['name LIKE ?', "%#{search}%"]) 
    else 
     find(:all) 
    end 
end 

這隻會返回搜索匹配狗的名字條款(所有者名稱被忽略)

我試圖改變它是這樣的:

def self.search(search) 
    if search 
     find(:all, :conditions => ['name LIKE ? or owner.name LIKE ?', "%#{search}%", "%#{search}%"]) 
    else 
     find(:all) 
    end 
    end 

然而說是沒有所有者專欄。如何更改搜索條件以便能夠搜索狗名和所有者姓名?

+0

軌版本,你使用的是哪個? – MrYoshiji

回答

7

假設通過遵循Rails慣例,您有dogs表爲Dog型號,owners型爲Owner型號。

更新search方法如下:

def self.search(search) 
    if search 
     joins(:owner).where('dogs.name LIKE ? or owners.name LIKE ?', "%#{search}%", "%#{search}%") 
    else 
     find(:all) 
    end 
    end 

你需要爲了dogsowners表之間的連接查詢訪問owners.name

+1

Kirti:1/MrYoshiji:0 ...你太快回答! – MrYoshiji

+0

haha​​hah ... ROFL :) –

+1

我們有一個贏家 –