Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用创建新标记所需的权限作为标记_Ruby On Rails_Ruby On Rails 3_Tags_Acts As Taggable On - Fatal编程技术网

Ruby on rails 使用创建新标记所需的权限作为标记

Ruby on rails 使用创建新标记所需的权限作为标记,ruby-on-rails,ruby-on-rails-3,tags,acts-as-taggable-on,Ruby On Rails,Ruby On Rails 3,Tags,Acts As Taggable On,如何防止用户添加标签数据库中不存在的新标签 我希望他们能够将任何已经存在的标签添加到另一个模型中,他们可以完全编辑该模型,但如果它们还不存在,就不能创建新的标签 我使用的是声明性的_auth,因此应该创建一些具有权限的用户来添加他们想要的任何标记 user.rb post.rb 更新: 这似乎可以做到,但我无法让错误消息变量工作: validates :feature_list, :inclusion => { :in =>

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

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

我使用的是声明性的_auth,因此应该创建一些具有权限的用户来添加他们想要的任何标记

user.rb post.rb

更新:

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

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

我没有使用acts作为标记,但是你能通过正常的rails验证吗

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

可能会更健壮,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

这里有一种高效、干净的方法来强制执行允许的标记:

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 验证:必须有有效的标记 def必须有有效的标签 valid_tags=actsastaggaleon::Tag.select('LOWER(name)name')。其中(name:Tag_list)。map(&:name) 无效的\u标记=标记\u列表-有效的\u标记 如果标签无效,是否有? errors.add(:tag_list,“包含未知标记:[#{invalid_tags.join(',')}])) 终止 终止
@霍尔顿,对不起,这是我无法理解的(
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
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