在railscast #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
的表用于 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
字段
关于ruby-on-rails - Rails 搜索查询关联模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22970699/