在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
但是说没有所有者专栏。如何更改搜索条件以便能够搜索狗名称和所有者名称?
答案 0 :(得分: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
您需要dogs
和owners
表之间的联接查询才能访问owners.name
字段