`
balaschen
  • 浏览: 192684 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

rails表单校验功能讨论

    博客分类:
  • ror
阅读更多
rails针对model提供了完善的校验功能,但有时候,我们的表单并不对应到model,比如login表单,比如search表单,这方面rails并没有给出很好的解决方案(verify太简陋),我是这么实现的(实验阶段):

1、修改ApplicationController
class << self    
    def validate_action(action_name,options={})
      config = {}
      yield config if block_given?
      return false if config.empty?
      filter_opts={:only => action_name.to_sym}
      options={:render=>{:action=>action_name.to_s}} if options[:render].nil? || options[:redirect_to].nil?
      before_filter(filter_opts) do |c|
        c.send :validates,config,options
      end
    end
  end

private
  
  def validates(validate_options={},options={})
    @errors = {}
    has_error=false
    validate_options.each do |key,config|
      field = key.to_sym
      if params[field].nil? or params[field].empty?
        @errors[field] = config[:message] || ""
        has_error = true
      end
    end
    if has_error
      unless performed?
        render(options[:render]) if options[:render]
        redirect_to(options[:redirect_to]) if options[:redirect_to]
      end
      return false
    else
      return true
    end
  end


2、需要检验的Controller增加检验配置:
class TestController < ApplicationController
  validate_action :test do |config|
    config[:loginame] = {:message=>"登陆名不能为空"}
    config[:password] = {:message=>"密码不能为空"}
  end
  
  def index
    render :action=>"test"
  end
  
  def test
    redirect_to :controller=>"/"
  end
end


3、增加表单:
<%
full_messages = []
@errors.each() do|attr,msg|
    full_messages << msg
end unless @errors.nil?
%>
<%if !full_messages.empty?%>
<ol>
<%full_messages.each do |msg|-%>
  <li><%=msg%></li>
<%end-%>
</ol>
<%end%>
<%form_tag :action=>"test" do%>
<%= text_field_tag "loginame",params[:loginame]%>
<%= password_field_tag "password",params[:password]%>
<input type="submit">
<%end%>
分享到:
评论
1 楼 balaschen 2007-12-25  
没人讨论自己来
修改了以下,做成插件(无需修改ApplicationControll),可以这样使用:
class TestController < ApplicationController
  validate_action :test do |v|
    v.required :field=>"loginame",:message=>"登陆名不能为空"
    v.required :field=>"password",:message=>"密码不能为空"
    v.string_len :field=>"loginame",:max=>5
  end
  
  def index
    render :action=>"test"
  end
  
  def test
    redirect_to :controller=>"/"
  end
end

刚刚做了两个测试用的校验器required和string_len,很容易就可以增加date、expression、regex校验

相关推荐

    judge:Rails的客户端表单验证

    通过将许多ActiveModel::Validation功能移植到JavaScript,Judge可以轻松地对Rails进行客户端表单验证。 最常见的验证通过存储在HTML5数据属性中的JSON字符串进行,并且仅在客户端执行。 无论您在何处,Judge都为...

    ruby on rails 实践

    第三章“Rails中的视图布局和辅助方法”,侧重于MVC架构中的视图部分,包括如何构建表单视图、实现AJAX交互,以及模板引擎的使用。模板引擎允许开发者使用Ruby代码和HTML混合的方式创建动态视图,大大简化了Web页面...

    swift-SwiftCop表单验证工具思路源自ROR的ActiveRecord

    SwiftCop 是一个灵感来源于 Ruby on Rails (ROR) 中的 Active Record 的表单验证工具,专为 Swift 开发者设计。在 ROR 中,Active Record 提供了一种强大的方式来处理模型的数据验证,使得开发者可以方便地定义和...

    Web开发敏捷之道-应用Rails进行敏捷Web开发-第三版.rar

    在随后的“Rails框架“部分中,作者深入介绍了Rails框架的各个组件。 除了上述两部分外,对Rails缺乏了解的读者应该首先阅读“起步”部分,通过一个最简单的应用示例感性了解这个时下热门的web框架。不熟悉Ruby的...

    spine.rails3:演示Spine和Rails集成的示例应用程序

    例如,你可以利用`remote: true`属性在Rails的链接或表单中启用Ajax请求。 7. **配置Asset Pipeline**:在`application.js`中引入Spine.js及其模块,并确保它们按正确顺序加载。 8. **测试与调试**:通过浏览器的...

    rail on ruby

    - **Scaffold**: Rails 提供的脚手架功能,快速生成 CRUD(Create, Read, Update, Delete)功能的基本代码。 - **REST 架构**: - 是一种软件架构风格,用来指导客户端与服务器之间的交互。 - 在 Rails 中,每个...

    个人网站留言功能

    - **数据校验**:对用户提交的信息进行合法性检查,防止恶意攻击,如SQL注入、XSS攻击等。 3. **数据库管理**: - **数据库设计**:创建一个用于存储留言的数据库表,包含字段如留言ID、用户名、内容、时间戳等。...

    关于Ruby on Rails视图编写的一些建议

    这种方式可以即时反馈用户的输入错误,而无需等待服务器响应,从而提高表单提交的效率。 **具体步骤如下:** 1. **创建自定义验证器模块**:首先,需要创建一个继承自`ClientSideValidations::Middleware::Base`的...

    login-React:使用React在表单中进行数据验证

    React堆 指示 该项目是通过引导的。 您将在下面找到一些有关如何执行常见任务的信息。 您可以在找到本指南的最新版本。...Ruby on Rails 在开发中代理API请求 配置代理后出现“无效的主机头”错误 手

    grails脚手架2次优化

    Grails是一款基于Groovy语言的开源Web应用框架,它借鉴了Ruby on Rails的设计理念,提供了丰富的自动化工具和插件系统,使得开发过程更为高效。其中,脚手架(Scaffolding)是Grails的一大特色功能,它能自动生成...

    Go-Packagecaptcha为Macaron提供验证码服务

    5. 验证用户输入:当用户提交表单时,使用`captcha.ValidateID`方法校验用户输入的验证码是否正确。 在`captcha-master`这个压缩包中,可能包含了`Package captcha`的源码,你可以深入研究其内部实现,了解验证码...

    CodeIgniter:php敏捷开发框架web快速开发详解

    1.1.2.2 防止对数据库的攻击:对表单输入的数据进行校验和处理 数据输入可能引发许多问题。因为 HTML 和数据库的限制,数据中总包含特定的符号—举例来说,省略符号和引号—可能导致你的数据库遭到攻击,最终得到你...

    validateur:受Ruby ActiveModel启发的功能验证

    这些规则可以应用于各种场景,如表单提交、API 输入验证或者业务逻辑中的数据校验。通过使用 validateur,你可以创建自定义验证规则,也可以利用内置的验证函数,如非空、长度限制、正则表达式匹配等。 验证过程...

    Web-development

    下面将详细讨论与这个主题相关的几个关键知识点: 1. **HTML基础知识**:HTML由一系列元素组成,每个元素用标签表示,如`&lt;html&gt;`、`&lt;head&gt;`、`&lt;body&gt;`等。元素可以嵌套,形成复杂的网页结构。例如,`&lt;form&gt;`标签...

    14款NodeJS Web框架推荐

    它提供了许多有用的特性,如数据库驱动网站应用的快速搭建、安全认证、会话管理、动态路由、密码加密、表单校验、管理界面自动生成、邮件发送等。 5. Grasshopper:Grasshopper是一个功能丰富、灵活的Node.js框架,...

    MiniStruts.rar_Java编程_Java_

    在"MiniStruts"中,每个表单对应的ActionForm类会持有用户的输入数据,并在Action类中进行验证和处理。ActionForm的使用有助于保持Action类的简洁,将数据处理与业务逻辑分开。 3. **DispatcherServlet**:在...

    OSS-SDK.pdf

    2.11.3 表单上传.......................................................................................40 2.11.4 追加上传...................................................................................

Global site tag (gtag.js) - Google Analytics