在 Rails 3 中,您只需包含 ActiveRecord 模块即可向任何非数据库支持的模型添加验证。我想为表单创建一个模型(例如 ContactForm 模型)并包含 ActiveRecord valiations。但是你不能简单地在 Rails 2.3.11 中包含 ActiveRecord 模块。有没有办法在 Rails 2.3.11 中完成与 Rails 3 相同的行为?
问问题
980 次
1 回答
2
如果您只想将虚拟类用作多个模型的一种验证代理,以下可能会有所帮助(对于 2.3.x,3.xx 允许您使用 ActiveModel,如前所述):
class Registration
attr_accessor :profile, :other_ar_model, :unencrypted_pass, :unencrypted_pass_confirmation, :new_email
attr_accessor :errors
def initialize(*args)
# Create an Errors object, which is required by validations and to use some view methods.
@errors = ActiveRecord::Errors.new(self)
end
def save
profile.save
other_ar_model.save
end
def save!
profile.save!
other_ar_model.save!
end
def new_record?
false
end
def update_attribute
end
include ActiveRecord::Validations
validates_format_of :new_email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
validates_presence_of :unencrypted_pass
validates_confirmation_of :unencrypted_pass
end
这样您就可以包含 Validations 子模块,如果您在定义它们之前尝试包含它,它将抱怨save
和save!
方法不可用。可能不是最好的解决方案,但它确实有效。
于 2011-07-19T15:21:30.257 回答