Rails将validation放在模块mixin中?
在我的模型中,一些validation是重复的:
validates :name, :length => { :minimum => 2 }, :presence => true, :uniqueness => true validates :name_seo, :length => { :minimum => 2 }, :presence => true, :uniqueness => true
我怎么把它放在mixin中? 如果我把它们放在mixin中,我会收到这个错误
app/models/validations.rb:5: undefined method `validates' for Validations:Module (NoMethodError)
module Validations extend ActiveSupport::Concern included do validates :name, :length => { :minimum => 2 }, :presence => true, :uniqueness => true validates :name_seo, :length => { :minimum => 2 }, :presence => true, :uniqueness => true end end
validates
宏必须在包含器的上下文中进行评估,而不是在模块中进行评估(就像您可能正在做的那样)。
你的模块应该是这样的:
module CommonValidations extend ActiveSupport::Concern included do validates :name, :length => { :minimum => 2 }, :presence => true, :uniqueness => true validates :name_seo, :length => { :minimum => 2 }, :presence => true, :uniqueness => true end end
然后在你的模型中:
class Post < ActiveRecord::Base include CommonValidations ... end
我在这里使用ActiveSupport :: Concern来使代码更清晰一些。