Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.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_Validation_Acts As Taggable On - Fatal编程技术网

Ruby on rails 在上作为标记的自定义验证

Ruby on rails 在上作为标记的自定义验证,ruby-on-rails,validation,acts-as-taggable-on,Ruby On Rails,Validation,Acts As Taggable On,嗨,我正在从事一个Rails 3项目,我正在使用acts作为标记,一切都很完美!) 我只有一个问题 有人知道我如何将我的“自定义”验证添加到ActsAsTaggableOn::Tag吗?我可以挂接的任何回调(例如在标记保存之前)?还是类似的 在保存模型之前,我需要在标记列表中的每个“标记”(以确保每个标记不包含任何非法字符)上运行正则表达式,并想知道是否有标准的方法来执行此操作 我解决这个问题的方法是在我的PostController中添加一个验证方法,它只是在标记列表上迭代并运行正则表达式,但

嗨,我正在从事一个Rails 3项目,我正在使用acts作为标记,一切都很完美!)

我只有一个问题

有人知道我如何将我的“自定义”验证添加到ActsAsTaggableOn::Tag吗?我可以挂接的任何回调(例如在标记保存之前)?还是类似的

在保存模型之前,我需要在标记列表中的每个“标记”(以确保每个标记不包含任何非法字符)上运行正则表达式,并想知道是否有标准的方法来执行此操作

我解决这个问题的方法是在我的PostController中添加一个验证方法,它只是在标记列表上迭代并运行正则表达式,但这在我看来很难看

有什么建议吗


先谢谢你!:)

您可以在保存前通过
回调在模型中执行此操作。在那里,您可以在将Post的标记保存到数据库中之前对其进行操作。

您可以在保存之前在模型中使用
回调进行操作。在那里,您可以在将Post的标记保存到数据库之前对其进行操作。

我过去使用过两种方法。一个通过自定义验证器,另一个通过验证调用

自定义验证方法

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

  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
显然,您需要使用更适合您的环境的内容来替换验证逻辑和错误消息文本

请记住,在这个场景中,您可以将每个标记作为字符串进行计算

标准验证方法

在你的模型中包括这个

validates :tag_list, :format => { :with => /^([A-Z][0-9],?\s?)*$/,
      :message => "Just too awesomezz" }
使用此方法时,您必须记住,您正在验证看起来像字符串的整个数组。因此,您需要在标记之间留出逗号和空格


选择最适合你的方法

我过去用过两种方法。一个通过自定义验证器,另一个通过验证调用

自定义验证方法

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

  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
显然,您需要使用更适合您的环境的内容来替换验证逻辑和错误消息文本

请记住,在这个场景中,您可以将每个标记作为字符串进行计算

标准验证方法

在你的模型中包括这个

validates :tag_list, :format => { :with => /^([A-Z][0-9],?\s?)*$/,
      :message => "Just too awesomezz" }
使用此方法时,您必须记住,您正在验证看起来像字符串的整个数组。因此,您需要在标记之间留出逗号和空格


选择最适合您的方法

您还可以在用户模型上重写标记方法:

  def tag(taggable, opts = {})
    return unless user.have? taggable.article
    super
  end

如果用户只能标记同一篇文章(文章:有许多用户)

也可以在用户模型上重写标记方法:

  def tag(taggable, opts = {})
    return unless user.have? taggable.article
    super
  end
如果用户只能标记同一篇文章(文章:has\u many users),那么它会很有用