2014-04-09 93 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

我们有一个赢家 –