2011-02-16 35 views
2

如何防止用戶添加標籤數據庫中不存在的新標籤?acts_as_taggable_on需要創建新標籤的權限

我希望他們能夠將已存在的任何標籤添加到可以完全編輯的另一個型號,但是如果它們尚不存在則無法創建新標籤?

我使用的是declarative_auth,因此應該創建一些具有權限的用戶來添加他們想要的任何標籤。

user.rb

acts_as_tagger 

post.rb

acts_as_taggable_on :features 

https://github.com/mbleigh/acts-as-taggable-on

UPDATE:

這似乎做到這一點,除了我不能得到錯誤信息變量上班:

validates :feature_list, :inclusion => { 
          :in => SomeModel.tag_counts_on(:features).map(&:name), 
          :message => "does not include {s}" } 

回答

2

也許可以更強大,軌驗證等,但是這個工程:

validate :valid_feature_tag 

    def valid_feature_tag 
    invalid_tags = false 
    feature_list.each do |tag| 
     list = SomeModel.tag_counts_on(:features).map(&:name) 
     unless list.include?(tag) 
     invalid_tags = true 
     end 
    end 
    unless invalid_tags == false 
     errors.add(:feature_list, 'cannot contain new tags, please suggest new tags to us') 
     return false 
    else 
     return true 
    end 
    end 
2

我沒有使用acts_as_taggable,但你能否通過正常的rails驗證?

# LIKE is used for cross-database case-insensitivity 
validates_inclusion_of :name => lambda { find(:all, :conditions => ["name LIKE ?", name]) } 
+0

我認爲這工作,但它不; - ( – holden 2011-02-22 09:41:55

1

這裏的執行允許標記的高效和清潔的方式:

 
validate :must_have_valid_tags 

def must_have_valid_tags 
    valid_tags = ActsAsTaggableOn::Tag.select('LOWER(name) name').where(name: tag_list).map(&:name) 

    invalid_tags = tag_list - valid_tags 
    if invalid_tags.any? 
    errors.add(:tag_list, "contains unknown tags: [#{invalid_tags.join(', ')}]") 
    end 
end 
相關問題