技术规格:ruby 2.2.1p85,Rails 4.2.3。
这完美地运作:
@performances = Performance.where(date: start_date..end_date).includes(:production_page).where(pages: {organization_id: organization_id, layout_id: nil, genre: genre_word})
我的问题是,目前,流派和genre_word需要完全匹配。我需要知道类型是否包含genre_word。我试过包括? (语法错误)并尝试使用.find_by_sql重写查询。
示例:
genre_word: Comedy
pages.genre: Comedy, Drama
理想情况下,pages.genre和genre_word会将此记录视为自pages.genre中的“喜剧”以来的匹配。我还必须在organization_id和layout_id上维护搜索。
我很感激任何帮助。
答案 0 :(得分:1)
解决方案最终成为:
@performances = Performance.includes(:production_page)
.where("pages.genre LIKE ?", "%#{genre}%").references(:production_page)
感谢任何帮助过的人。
答案 1 :(得分:0)
您可以使用SQL LIKE
或ILIKE
运算符来进行部分字符串匹配。一个简单的例子:
genre_name = "Drama"
Article.where("genre LIKE ?", "%#{genre_name}%")
这将生成SQL查询:
SELECT "articles".* FROM "articles" WHERE (name LIKE '%Drama%')
ILIKE
是LIKE
的不区分大小写的姐妹。百分号将在搜索词之前或之后匹配零个或多个字符,因此在示例的情况下,如果文章具有类型&喜剧,戏剧'它也将匹配。