验证行为是否可标记

validate acts as taggable on

我正在使用 acts-as-taggable-on 添加标签。我的模型中有这个:

acts_as_taggable 
validates_inclusion_of :tag_list, in: %w( bug feature )

但是,如果我尝试在 rails 控制台中:

i = Issue.find(1)
i.tag_list = "bug"
i.save

验证失败,问题 tag_list 未保存。如果我删除验证行,那么我当然可以添加 tag_list。 我也尝试编写自定义验证:

validate :tag_list_inclusion

  def tag_list_inclusion
    tag_list.each do |tag|
      return false unless %w(bug feature).include?(tag)
    end
    return true
  end

我的自定义验证确实有效,因为它总是 returns true 并且总是通过验证(即使它不应该)。 唯一有效的验证是:

validates_presence_of :tag_list

我在这里找到了答案:http://guides.rubyonrails.org/active_record_validations.html#custom-methods

我的自定义验证器是:

  def tag_list_inclusion
    tag_list.each do |tag|
      errors.add(tag,"is not valid") unless %w(bug feature).include?(tag)
    end
  end