使用act-as-taggable-on进行自定义验证

cgi*_*omi 1 validation ruby-on-rails acts-as-taggable-on

嗨,我正在开发一个Rails 3项目,我正在使用act-as-taggable-on,一切正常!:)

我只有一个问题.

有谁知道如何将我的'自定义'验证添加到ActsAsTaggableOn :: Tag?我可以挂钩的任何回调(例如before_tag_save)?或类似的东西?

在保存模型之前,我需要在tag_list中对每个'标签'运行一个正则表达式(以确保每个标签不包含任何非法字符),并且想知道是否有标准的方法.

我解决问题的方法是在我的PostController中添加一个验证方法,它只是遍历标签列表并运行正则表达式,但这对我来说似乎很难看.

有什么建议?

先感谢您!:)

gk0*_*k0r 8

我过去曾用过两种方式.一个通过自定义验证器,另一个通过验证调用.

自定义验证方法

在您的模型中,设置以下内容

  validate :validate_tag

  def validate_tag
    tag_list.each do |tag|
      # This will only accept two character alphanumeric entry such as A1, B2, C3. The alpha character has to precede the numeric.
      errors.add(:tag_list, "Please enter the code in the right format") unless tag =~ /^[A-Z][0-9]$/
    end
  end
Run Code Online (Sandbox Code Playgroud)

显然,您需要在您的环境中使用更合适的更新验证逻辑和错误消息文本.

请记住,在这种情况下,您可以将每个标记评估为字符串.

标准验证方法

将其包含在您的模型中

validates :tag_list, :format => { :with => /^([A-Z][0-9],?\s?)*$/,
      :message => "Just too awesomezz" }
Run Code Online (Sandbox Code Playgroud)

使用此方法,您必须记住,您正在验证看起来像字符串的整个数组.因此,您需要在标记之间允许使用逗号和空格.

选择最适合您的方法