Vic*_*box 29 ruby validation ruby-on-rails models
在我的模型中,一些验证是重复的:
validates :name, :length => { :minimum => 2 }, :presence => true, :uniqueness => true
validates :name_seo, :length => { :minimum => 2 }, :presence => true, :uniqueness => true
Run Code Online (Sandbox Code Playgroud)
我怎么把它放在mixin中?如果我把它们放在mixin中,我会收到这个错误
app/models/validations.rb:5: undefined method `validates' for Validations:Module (NoMethodError)
Run Code Online (Sandbox Code Playgroud)
Sim*_*tti 50
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
Run Code Online (Sandbox Code Playgroud)
该validates
宏必须在包入的予以评价,而不是模块的(就像你可能在做).
Ver*_*cus 26
你的模块应该是这样的:
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
Run Code Online (Sandbox Code Playgroud)
然后在你的模型中:
class Post < ActiveRecord::Base
include CommonValidations
...
end
Run Code Online (Sandbox Code Playgroud)
我在这里使用ActiveSupport :: Concern使代码更清晰一些.