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
您需要在dogs
和owners
表之间进行连接查询才能访问owners.name
字段