ruby-on-rails - Rails 搜索查询关联模型

标签 ruby-on-rails ruby activerecord

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

您需要在 dogsowners 表之间进行连接查询才能访问 owners.name 字段

关于ruby-on-rails - Rails 搜索查询关联模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22970699/

相关文章:

ruby-on-rails - 将Rails ActiveRecord转换为原始SQL

ruby-on-rails - Rails 4、omniauth-facebook、rack-cors、Heroku 的 CORS 问题

ruby-on-rails - ActiveRecord 查询 : Accessing outer field in subquery

ruby-on-rails - rails : Whats the easiest method to convert a serialized hash column into json column

mysql - 请解释一下CodeIgniter ActiveRecord set() update()

mysql - 当数据库不可用时,延迟的工作人员退出

ruby-on-rails - 上传的视频和streamio-ffmpeg

ruby-on-rails - 处理网页抓取中的无效字符

ruby - Ruby中直接从单个元素散列中获取键或值

ruby-on-rails - Ruby 中的正则表达式