【问题标题】:acts_as_taggable_on with permissions required to create new tags具有创建新标签所需的权限的acts_as_taggable_on
【发布时间】:2011-06-28 09:52:19
【问题描述】:

如何防止用户添加标签数据库中尚不存在的新标签?

我希望他们能够将任何已经存在的标签添加到他们可以完全编辑的另一个模型中,但如果它们尚不存在则无法创建新标签?

我正在使用 declarative_auth,因此应该创建一些具有权限的用户来添加他们想要的任何标签。

user.rb

acts_as_tagger

post.rb

acts_as_taggable_on :features

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

更新:

这似乎可以做到,但我无法让错误消息变量工作:

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 tags acts-as-taggable-on


    【解决方案1】:

    我没有使用acts_as_taggable,但是你能通过正常的rails验证吗?

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

    【讨论】:

    • @holden,对不起,这超出了我的范围。 :(
    【解决方案2】:

    可能会更健壮,并且像 Rails 验证一样,但这有效:

    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
    

    【讨论】:

      【解决方案3】:

      这是一种有效且干净的方法来强制执行允许的标签:

      验证: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 如果 invalid_tags.any? errors.add(:tag_list, "包含未知标签:[#{invalid_tags.join(', ')}]") 结尾 结尾

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-04
        • 2022-12-15
        • 2011-06-26
        • 1970-01-01
        • 2020-09-29
        • 2021-04-12
        • 2012-05-31
        • 1970-01-01
        相关资源
        最近更新 更多