In 轨道广播#37它们显示了我正在尝试实现的简单搜索。我有以下关联:
class Owner < ActiveRecord::Base
has_many :dogs
end
class Dog < ActiveRecord::Base
belongs_to :owner
end
Dog 模型有一个属性“name”,主人也有。我需要能够过滤狗列表,这样如果您输入“Fido”(狗)或“Bob”(主人),Fido 就会显示在列表中。以下是当前设置搜索的方式:
模型狗.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 约定,您有名为dogs
for Dog
模型和owners
for Owner
model.
更新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
and owners
表以便访问owners.name
field
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)