0

我对标志 :on 和 :any 在acts_as_taggable_on 的“tagged_with”方法中如何协同工作感到困惑。

例如,如果我有以下用户 @user1 和 @user2:

class User < ActiveRecord::Base
      acts_as_taggable_on :skills, :interests
    end

@user1 = User.new(:name => "Bobby")
@user1.interest_list = "1, 15"     
@user1.skill_list = "2, 17"
@user1.save

@user2 = User.new(:name => "Al")
@user2.interest_list = "3, 10"     
@user2.skill_list = "4, 6"
@user2.save

当我想让所有用户的兴趣列表包含任何标签 [“2”、“50”] 时,我尝试了这个:

User.tagged_with(["2", "50"], :on => :interests, :any => true)

问题是我找回了@user1(在技能列表中有“2”,而不是兴趣列表),即使我没有预料到。似乎标志 :any 可能已经覆盖了标志 :on。有没有办法实际执行我上面描述的过滤器?

另外,一个附带的问题是,你如何找到一个方法可用的所有标志?例如,tagged_with 有 :on, :any, :match_all, ...,我如何列出所有这些?

谢谢大家的帮助!

4

2 回答 2

1

你如何找到一个方法可用的所有标志?

尝试发展你的“源代码阅读”技能。一个好的第 3 方库将始终记录它公开的关键方法的可用选项。

于 2011-04-04T15:05:55.223 回答
1

好吧,我找到了问题所在。感谢 aurelian 将我指向acts_as_taggable_on 的来源。事实证明,对于 :any overwriting :on 问题的修复已于 3 月 18 日在 github master 上修复。来自 ruby​​gem.org 的 gem 还没有包含这个修复。

因此,不要使用 ruby​​gem.org 构建我的应用程序: gem 'acts_as_taggable_on'

我只是直接指向 git 源:
gem 'acts_as_taggable_on', :git => 'git://github.com/mbleigh/acts-as-taggable-on.git'

于 2011-04-06T13:40:30.567 回答