我有一个名为Story
的模型,它有 - 并且属于很多 - 标签。我正在尝试创建基于故事属性仅显示某些故事的功能。我通过链接where()
s:
q = Story.where(condition1)
q = q.where(condition2)
......等等。我希望能够过滤的其中一件事就是标签,起初我尝试按照以下方式进行:
q = q.joins(:tags)
q = q.where(tagCondition1)
q = q.where(tagCondition2)
...
但是,这只发现具有匹配所有条件的单个标记的故事。我想找到至少有一个符合每个条件的标签的所有故事。也就是说,目前如果我有条件LIKE %al%
和LIKE %be%
,它将匹配带有标记'alpha beta'
的故事;我希望它还匹配标记'alpha'
和标记'beta'
。
答案 0 :(得分:0)
也许您需要以下内容来匹配多个条件:
$.ajax({
// ...
dataType: 'json'
// ...
});
答案 1 :(得分:0)
您可以将firebase serve --only functions
与计数结合使用。
HAVING
用法:
class Story < ActiveRecord::Base
has_and_belongs_to_many :tags
def self.with_tags(*tags, min: 1)
joins(:tags)
.where(tags: { name: tags })
.group('story.id')
.having("count(*) = ?", min)
end
end
包含任何标记params[:tag] = "foo bar baz"
Story.with_tags(params[:tag], *params[:tag].split)
的故事。
答案 2 :(得分:0)
查询错误。由于您使用的是AND,并且您希望匹配第一个或第二个条件。也许你应该使用像
这样的东西 where("tags.field like '%al% or tags.field like '%be%'")
答案 3 :(得分:0)
好的,所以这就是我最终做的事情:(为谷歌搜索和类似问题的人添加):
conditions.each do |condition|
q_part = select('1').from('stories_tags')
q_part = q_part.where('stories_tags.story_id = stories.id')
q_part = q_part.where('stories_tags.name SIMILAR TO ?', condition)
q = q.where("EXISTS (#{q_part.to_sql})")
end