在rails中搜索记录包括belongs_to或has_many

ker*_*ion 2 ruby-on-rails has-many where-clause belongs-to rails-activerecord

我有两个模型、产品和生产商。一个生产者可以有很多产品,一个产品属于一个生产者。我现在尝试从搜索查询中获取所有记录,如下所示:

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

这应该返回所有product.name或product. Producer.name类似于搜索字符串的产品。有没有短轨路?

MrY*_*iji 5

您可以执行以下操作:

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

您可以用它制作一个范围:

class Product < ActiveRecord::Base

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

并像这样使用它:

@products = Product.with_name_like('Chair')
Run Code Online (Sandbox Code Playgroud)