gpt4 book ai didi

ruby-on-rails - Association in Ruby (on rails) 的相关内容

转载 作者:数据小太阳 更新时间:2023-10-29 08:38:15 24 4
gpt4 key购买 nike

假设我的问题上有多个标签。我希望能够通过标签找到相关问题(类似于 iTunes Genius)或根据共享问题找到标签的相关标签。

不幸的是,我不知道该怎么做。尤其是涉及到相关标签时。

希望有人能给我提示!非常感谢!

最佳答案

要有效地完成此任务,需要对 SQL 有深入的了解。您可以使用 ActiveRecord 来帮助您构建查询,但策略实际上在于将生成的 SQL 查询。

假设您有 Tag 和 Question 模型,其中 QuestionTag 连接模型用于 has-many-through 关系:

class Question < ActiveRecord::Base
has_many :question_tags
has_many :tags, :through => :question_tags
end

class Tag < ActiveRecord::Base
has_many :question_tags
has_many :questions, :through => :question_tags
end

class QuestionTag < ActiveRecord::Base
belongs_to :question
belongs_to :tag
end

您可以这样做来查找与特定标签匹配的问题:

tag = Tag.find_by(name: 'foo')
related_questions = tag.questions

您还可以找到匹配所有一组标签的问题:

tag_names = ['foo', 'bar', 'baz']
subquery = QuestionTag.joins(:tag).
select('question_tags.question_id').
where(tags: {name: tag_names}).
group('question_tags.question_id').
having("COUNT(*) = #{tag_names.size}").to_sql
related_questions = Question.where("id IN (#{subquery})")

您可以像这样找到与特定标签相关的标签:

tag = Tag.find_by(name: 'foo')
subquery = tag.question_tags.select('question_tags.question_id').to_sql
related_tags = Tag.joins(:question_tags).
where("question_tags.question_id IN #{subquery}").
where.not(id: tag.id)

关于ruby-on-rails - Association in Ruby (on rails) 的相关内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21443121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com