ruby-on-rails – Rails 3:显示表单的验证错误(不保存ActiveRec
如果这是一个非常普遍和/或荒谬的问题,请道歉;我发誓我已多次阅读文档,并且所有内容似乎都专注于ActiveRecord,以至于他们已经离开了除了创建或编辑模型数据之外的其他形式的路径.
例如,带有输入的表单可控制某些统计信息的提取和显示. rails为验证此表单的用户输入提供了什么,不会调用保存在任何记录上?像: >:电子邮件必须是电子邮件地址 等等(大多数Web框架标准的东西)…… Rails中有什么东西可以让我执行这个任意验证,还有一些查看辅助工具来显示错误列表,还是一切都与ActiveRecord相结合? 抱歉,如果我在文档中忽略了这一点,但this和this并没有真正涵盖它,至少就疲惫的眼睛所能说的那样. 划痕头 感谢Rob的回答,这就是我想出的.我创建了一个实用程序类(恰当地命名为Validator),它只是嵌入到我的控制器中,用于任何需要它的东西. module MyApp class Validator include ActiveModel::Validations include ActiveModel::Conversion extend ActiveModel::Naming def initialize(attributes = {}) super attributes.each { |n,v| send("#{n}=",v) if respond_to?("#{n}=") } end end end 例如,现在在控制器中,只需定义一个内联类: class LoginController < ApplicationController class AuthenticationValidator < MyApp::Validator attr_accessor :email attr_accessor :password validates_presence_of :email,:message => "E-mail is a required field" validates_presence_of :password,:message => "Password cannot be blank" end def authenticate if request.post? @validator = AuthenticationValidator.new(params) if @validator.valid? # Do something meaningful end end end 当逻辑更加面向控制器时,将每一组验证规则放在自己的.rb中感觉有点不必要.可能有一种更简洁的方式来编写它,但我对Ruby和Rails很陌生. 解决方法
是的,它可以很容易地完成.
您可以使用validations API. 例如,这是一个联系我们模型,我用于不使用ActiveRecord的应用程序. class ContactUs include ActiveModel::Validations include ActiveModel::Conversion extend ActiveModel::Naming attr_accessor :name,:email,:subject,:message validates_presence_of :name,:message,:subject validates_format_of :email,:with => /A[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}z/ def initialize(attributes=nil) attributes.each do |name,value| send("#{name}=",value) end unless attributes.nil? end def persisted? false end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |