我想通过标记进行搜索,所以我需要一个exists
查询,但我仍然需要在所有标记上加入连接。我尝试了几种方法,并且我没有想法。Rails ActiveRecord在指定范围内通过标记查找问题
的Qustion - 标签关系是通过has_and_belongs_to_many
两种方式(即我有一个QuestionTags木匠表)
例如
Question.join(:tags).where('tag.name = ?', tag_name).includes(:tags)
我希望它可以做什么,我需要的,但实际上它只是捣烂了includes
与join
和我刚刚结束了与基本内连接。
Question.includes(:tags)
.where("exists (
select 1 from questions_tags
where question_id = questions.id
and tag_id = (select id
from tags
where tags.name = ?))", tag_name)
此获取正确的结果,但一)实在是太丑了,和b)给出了一个折旧的警告,又似乎混淆includes
与join
:
弃用警告:看起来你是在字符串SQL sn ippet中引用的热切加载表(一个 :questions,tags)。对于 例如:
Post.includes(:comments).where("comments.title = 'foo'")
注意我试图写这些的命名范围。
让我知道如果问题不明确。提前致谢。
说实话,我很困惑,为什么内部联接是不是你不够好,你能请到更详细为什么加入标签工作不适合你? –
@EdgarsJekabsons,因为我需要显示所有带有特定标签的问题列表,但在该列表中仍需要显示每个问题的所有标签,避免N + 1查找。例如。点击上面的'sql'标签来查看我需要的SO页面。只有内部连接,页面将只显示每个问题下的'sql'标签。 – fearofawhackplanet