我有两个模型,产品和生产者。一个生产者可以有许多产品,一个产品属于一个生产者。我现在正试图从这样的搜索查询中获取所有记录:
@products = Product.where("name like ? OR product.producer.name like ?", "%#{params[:q]}%", "%#{params[:q]}%")
这应该返回 product.name 或 product.producer.name 与搜索字符串类似的所有产品。有短轨吗?
我有两个模型,产品和生产者。一个生产者可以有许多产品,一个产品属于一个生产者。我现在正试图从这样的搜索查询中获取所有记录:
@products = Product.where("name like ? OR product.producer.name like ?", "%#{params[:q]}%", "%#{params[:q]}%")
这应该返回 product.name 或 product.producer.name 与搜索字符串类似的所有产品。有短轨吗?
您可以执行以下操作:
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')