【问题标题】:Rails Search Query Associated ModelRails 搜索查询关联模型
【发布时间】:2014-04-10 02:51:01
【问题描述】:

在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?

标签: ruby-on-rails ruby activerecord


【解决方案1】:

假设按照 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 字段

【讨论】:

  • Kirti: 1 / MrYoshiji : 0 ...你回答得太快了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多