自定义验证与行为
您好我正在开发一个Rails 3项目,我正在使用行为作为标记,并且一切都完美无缺! :)
我只有一个问题。
有谁知道我可以如何将我的'自定义'验证添加到ActsAsTaggableOn :: Tag? 我可以挂钩的任何回调(例如before_tag_save)? 或类似的东西?
在我保存模型之前,我需要在我的tag_list中为每个“标记”运行一个正则表达式(以确保每个标记都不包含任何非法字符),并想知道是否有标准方法。
我解决问题的方法是在我的PostController中添加一个验证方法,它只是遍历标签列表并运行正则表达式,但这对我来说似乎很难看。
有什么建议么?
先谢谢你! :)
过去我采用了两种方式。 一个通过自定义验证器,另一个验证通话。
自定义验证方法
在你的模型中,设置以下内容
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" }
用这种方法,你必须记住你正在验证看起来像一个字符串的整个数组。 因此,您需要在标签之间留出逗号和空格。
选择最适合您的方法
你可以在模型中用before_save
回调来完成。 在保存到数据库之前,您可以操纵(比方说)Post的标签。
你也可以在用户模型上重写标记方法:
def tag(taggable, opts = {})
return unless user.have? taggable.article
super
end
如果用户只能标记相同的文章(文章:has_many用户)
链接地址: http://www.djcxy.com/p/36003.html