基本上在我的应用程序中,一首歌有许多类别,一个类别有很多歌曲,通过称为分类的连接模型。
我基本上在歌曲模型中有一个搜索功能,目前看起来像这样:
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
这很好,因为标题和歌词是歌曲模型的一部分。但是,我不确定如何添加一个函数,以便您可以输入类别描述(类别模型所具有的唯一属性)并让它在搜索结果中返回,因为它位于单独的模型。在此先感谢您的帮助!
答案 0 :(得分: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
和includes
之间的区别:What's the difference between "includes" and "joins" in ActiveRecord query?