包含在where条件中

时间:2015-11-12 14:20:17

标签: ruby-on-rails ruby conditional where contains

技术规格: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上维护搜索。

我很感激任何帮助。

2 个答案:

答案 0 :(得分:1)

解决方案最终成为:

@performances = Performance.includes(:production_page)
   .where("pages.genre LIKE ?", "%#{genre}%").references(:production_page)

感谢任何帮助过的人。

答案 1 :(得分:0)

您可以使用SQL LIKEILIKE运算符来进行部分字符串匹配。一个简单的例子:

genre_name = "Drama"
Article.where("genre LIKE ?", "%#{genre_name}%")

这将生成SQL查询:

SELECT "articles".* FROM "articles" WHERE (name LIKE '%Drama%')

ILIKELIKE的不区分大小写的姐妹。百分号将在搜索词之前或之后匹配零个或多个字符,因此在示例的情况下,如果文章具有类型&喜剧,戏剧'它也将匹配。