Rails搜索查询关联模型

时间:2014-04-09 18:13:40

标签: ruby-on-rails ruby activerecord

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

class Owner < ActiveRecord::Base
    has_many :dogs
end

class Dog < ActiveRecord::Base
    belongs_to :owner
end

Dog模型有一个属性&#34; name&#34;所有者也是如此。我需要能够过滤狗的列表,这样如果你输入&#34; Fido&#34; (狗)或&#34;鲍勃&#34; (所有者)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

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

1 个答案:

答案 0 :(得分:7)

假设遵循Rails约定,您有dogs模型Dogowners模型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字段