2

我有两个模型,产品和生产者。一个生产者可以有许多产品,一个产品属于一个生产者。我现在正试图从这样的搜索查询中获取所有记录:

@products = Product.where("name like ? OR product.producer.name like ?", "%#{params[:q]}%", "%#{params[:q]}%")

这应该返回 product.name 或 product.producer.name 与搜索字符串类似的所有产品。有短轨吗?

4

1 回答 1

5

您可以执行以下操作:

Product.includes(:producer)
        .where('products.name LIKE ? OR producers.name LIKE ?', "%#{params[:q]}%", "%#{params[:q]}%")

你可以用它做一个范围:

class Product < ActiveRecord::Base

  scope :with_name_like, lambda { |name| 
            includes(:producer).where('products.name LIKE ? OR producers.name LIKE ?', "%#{name}%", "%#{name}%") 
  }

并像这样使用它:

@products = Product.with_name_like('Chair')
于 2013-06-18T18:18:53.500 回答