gpt4 book ai didi

ruby-on-rails - 如何检查连接条件?

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

我正在尝试为我的窗口小部件搜索中的用户设置过滤。我希望他们能够点击多个标签,并只返回应用了正确标签的结果。

表格设置如下:

  • Widget 有很多标签,通过标签
  • 标签有很多小部件,通过标签
  • Taggings 是一个连接表

在我的 Controller 中,我遍历小部件,并检查标签连接的条件:

@widgets = Widget.all
@current_tags = [1,5,7,10,15] # Passed in from params
@current_tags.each do |t|
@widgets = @widgets.joins(:tags).where("tags.id=?", t)
end

我只希望返回具有所有这些标签的小部件。

这对于一个标签似乎工作正常,但是一旦您单击另一个标签,一旦您选择了多个标签,它就会产生问题。例如,这会按预期返回小部件 1:

# Widget 1 is joined to tags 1,5,7,9
@current_tags = [5]

这不会返回任何结果,即使它应该返回小部件 1:

# Widget 1 has tags 1,5,7,9
@current_tags = [5,7]

我在检查标签和小部件之间的连接时是否做错了什么?

最佳答案

您可能对 acts-as-taggable-on gem 感兴趣,但对于您的问题,这是一个棘手的问题!您肯定可以使用一个强大的 Rails 习惯用法,但这里有一个蛮力方法:

unless @current_tags.empty?
# set initial state to widgets that match the first tag
@widgets = @widgets.joins(:tags).where("tags.id=?", @current_tags.shift)
@current_tags.each do |t|
# then keep only widgets in initial state AND the next tag
@widgets &= @widgets.joins(:tags).where("tags.id=?", t)
end
end

关于ruby-on-rails - 如何检查连接条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33064975/

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