0

我對flags:on和any:如何在acts_as_taggable_on的「tagged_with」方法中一起工作感到困惑。是否:任何標誌覆蓋acts_as_taggable_on的tagged_with中的on(上下文)標誌?

舉例來說,如果我有以下的用戶@ user1和@用戶2:

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」的skill_list,不interest_list),即使我期待沒有。看來,國旗:任何人都可能會覆蓋國旗:開。有沒有辦法實際執行我上面描述的過濾器?

此外,一個側面的問題是,你如何找到一個方法可用的所有標誌?例如,tagged_with具有:on,:any,:match_all,...,我如何列出所有這些內容?

感謝您的幫助,每個人!

+0

我在行爲-AS-taggable-沒有專家但是我瀏覽了源代碼並[看起來應該按預期工作](https://github.com/mbleigh/acts-as-taggable-on/blob/2752cfe/lib/acts_as_taggable_on/acts_as_taggable_on/) core.rb#L91)。執行此代碼時生成的SQL查詢是什麼? – 2011-04-06 03:13:39

+1

是的,我發現它也很奇怪,源代碼確實包含了標誌的正確邏輯。問題是,tagged_with方法在2011年3月18日檢查了一個主要修復程序,但它尚未成爲rubygem.org上gem的一部分。從git中直接引用後,所有東西現在都可以像源代碼那樣工作。謝謝,布蘭登,爲您提供幫助。 – Dominic 2011-04-06 13:43:06

回答

1

好的,我找到了問題所在。感謝aurelian爲我指出了acts_as_taggable_on的來源。 事實證明,修正:任何覆蓋:問題已於3月18日在github master上修復。而來自rubygem.org的gem尚未包含此修復程序。

因此,而不是使用從rubygem.org構建我的應用程序: gem 'acts_as_taggable_on'

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

1

你怎麼找到一個方法可用的所有標誌?

試着發展你的「源代碼閱讀」技能。一個好的第三方庫將始終記錄the key methods that it expose的可用選項。

+0

感謝您指點我的源代碼。除了所有的旗幟之外,我的確找到了關於旗幟的原始問題的答案。 – Dominic 2011-04-06 13:44:18

相關問題