Ruby on rails 在上作为标记的自定义验证
嗨,我正在从事一个Rails 3项目,我正在使用acts作为标记,一切都很完美!) 我只有一个问题 有人知道我如何将我的“自定义”验证添加到ActsAsTaggableOn::Tag吗?我可以挂接的任何回调(例如在标记保存之前)?还是类似的 在保存模型之前,我需要在标记列表中的每个“标记”(以确保每个标记不包含任何非法字符)上运行正则表达式,并想知道是否有标准的方法来执行此操作 我解决这个问题的方法是在我的PostController中添加一个验证方法,它只是在标记列表上迭代并运行正则表达式,但这在我看来很难看 有什么建议吗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中添加一个验证方法,它只是在标记列表上迭代并运行正则表达式,但
先谢谢你!:) 您可以在保存前通过
回调在模型中执行此操作。在那里,您可以在将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),那么它会很有用