Rails搜索查询关联模型

在railscast#37中,他们展示了我想要实现的简单搜索。 我有以下关联:

class Owner < ActiveRecord::Base has_many :dogs end class Dog < ActiveRecord::Base belongs_to :owner end 

Dog模型具有属性“name”,所有者也是如此。 我需要能够过滤狗的列表,这样如果你输入“Fido”(狗)或“Bob”(所有者)Fido将出现在列表中。 以下是当前搜索的设置方式:

model 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 

但是说没有所有者专栏。 如何更改搜索条件以便能够搜索狗名称和所有者名称?

假设通过遵循Rails约定,您可以为Dog模型创建名为dogs表,为Owner模型创建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字段