0

基本的に、私のアプリケーションでは、カテゴリ化と呼ばれる結合モデルを通じて、1 つの曲に多くのカテゴリがあり、1 つのカテゴリに多くの曲があります。

基本的に、現時点では次のような曲モデルの検索機能があります。

def self.search(search)
    if search
      find(:all, conditions: ['title LIKE ?', "%#{search}%"], order: 'title')
      find(:all, conditions: ['lyrics LIKE ?', "%#{search}%"], order: 'title')
    else
      #if nothing is inputed then just show all songs
      find(:all, order: 'title')
    end
  end

タイトルと歌詞は曲モデルの一部であるため、これは問題なく機能します。ただし、関数を追加して、カテゴリの説明 (カテゴリ モデルが持つ唯一の属性) を入力し、それが検索結果にも返されるようにする方法がわかりません。セパレートモデル。助けてくれてありがとう!

4

1 に答える 1

1

ActiveRecord includesメソッドを使用します。

 class Song < ActiveRecord::Base
   has_many :categorizations
   has_many :categories, :through=>:categorizations

   def self.search(search)
    res=includes(:categories).order('title')
    res=res.where('title LIKE :search OR lyrics LIKE :search',:search=>"%#{search}%") if search
    res
  end

  def self.search_by_category_desc(search)
    res=joins(:categories).order('title')
    res=res.where('categories.description LIKE ?',"%#{search}%") if search
    res
  end

  def self.search_by_title_or_lirics_or_cat_desc(search)
    res=includes(:categories).order('title')
    res=res.where('title LIKE :search OR categories.description LIKE :search OR lyrics LIKE :search',:search=>"%#{search}%") if search
    res
  end
 end

これにより、検索された曲のすべてのカテゴリがプリロードされます。

と の違いを思い出してくださいjoins: includesActiveRecordクエリの「含む」と「結合」の違いは何ですか?

于 2012-07-19T10:16:23.800 に答える