`
muyu
  • 浏览: 222698 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Rails的model验证

阅读更多

 

写道
这是项目开发中的记录的,关于model的验证

 

在model层里加入关于validates_presence_of、validates_numericality_of等验证,当客户端构造的对象通不过验证时,错误信息要反映到表单的放置error_messages的地方。

 

有以下几点要注意:

 

传递的实例变量

这里,要注意错误信息的传递,即如何从model层传递到view层。用实例变量(比如”@pet”),而不是pet,pet是传不过来的。

 

在view层,有

<% form_for :pet, @pet, :url => { :action => 'add' } do |f| %>

<%= f.error_messages %>(这一行也可以写作<%= error_messages_for :pet %>)

在controller层,则要

@pet = Pet.new(params[:pet])

 

如果我们写作pet= Pet.new(params[:pet]),错误信息就无法在view层呈现。

 

跳转

如果在controller中加入了保存失败的跳转处理,当验证失败后,系统直接转向了else的代码区,而没能把当前的模型对象出错信息显示到view层。

 

      if @pet.save

        redirect_to_message '保存成功'

      #else

      #  redirect_to_message 'shibaila'

 

多个对象

在企业会员提交加盟申请时,表单里有两个对象:leagueapp 和 categories,前者是加盟信息,后者是经营类别。由于经营类别是从数据库动态加载的,所以,在数据验证失败后,leagueapp对象仍然有效,即@leagueapp仍然可以在view层显示。紧接着问题出现了,由于@categories只在页面提交时猜赋值的,而点击提交按钮后的request.post? 下的代码中,并没有@categories 的赋值情况,所以,view层无法显示最初正常显示的分类。

 

解决方法,当然很简单了,无论页面是否提交,每次均要加载@categories赋值的代码,确保页面提交失败时,view层可以正常显示分类那段代码。

 

也就是,把@categories = Category.find(:all) 放在 if request.post? … else … end 之外。

考虑到验证失败后,要保留用户刚才选中的分类,可以在提交的代码中记下选中的值,然后,在view层用js显示绑定 

 

多对多的验证

 

一个加盟商可以有多个分类,两个表:leagueapps 和 scopes ,还有一个多对多的关系表leagueapps_scopes ,要注意在这两个model同时设置

 has_and_belongs_to_many :leagueapps。

 

验证的语法,就和普通字段一样,在model / leagueapps.rb 下,用

  validates_presence_of :addr, :message => '详细地址必填', :on => :create

  validates_presence_of :scopes, :message => '经营项目至少选一个', :on => :create

 

尽管leagueapps表中没有scopes字段,ActiveRecord自动帮我们搞定啦。


 

1
0
分享到:
评论

相关推荐

    Ruby-ActiveModel的自定义验证用于检查数组是否包含在另一个中

    在Ruby开发中,ActiveModel是Rails框架的一部分,它提供了一种模型层的接口,使得非ActiveRecord对象也能具有类似于ActiveRecord的行为。这个标题提到的"Ruby-ActiveModel的自定义验证用于检查数组是否包含在另一个...

    Rails项目源代码

    Ruby on Rails,通常简称为Rails,是一个基于Ruby编程语言的开源Web应用框架,遵循MVC(Model-View-Controller)架构模式。这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何...

    rails2-sample

    Ruby on Rails是一种基于Ruby语言的开源Web应用框架,遵循MVC(Model-View-Controller)设计模式。它以其优雅的语法、高效的开发速度以及“约定优于配置”的理念而闻名于世,极大地简化了Web应用的开发过程。此外,...

    Ruby on Rails入门例子

    1. **Model**:模型是应用程序中的数据层,它与数据库交互,负责业务逻辑和数据验证。在Rails中,我们通常使用ActiveRecord库来创建模型,通过继承`ApplicationRecord`类并定义属性和关系。 2. **View**:视图负责...

    rails查询学习笔记

    10. **SQL注入防范**:Rails通过绑定参数的方式防止SQL注入,如`Model.where(id: params[:id])`,这种方式会自动转义和验证输入,确保安全性。 以上内容只是Rails查询学习笔记中可能涵盖的部分主题,具体笔记内容还...

    Rails 101S

    - **深入实践CRUD功能**:详细讲解如何具体实现CRUD操作,包括数据验证、错误处理等高级特性。 - **MVC架构与RESTful概念**:介绍模型(Model)、视图(View)、控制器(Controller)三者之间的关系以及RESTful API的设计...

    rails敏捷开发的购物车系统

    这可以通过使用Rails的身份验证机制,如Devise或Authlogic,实现用户登录和会话管理。 最后,测试是任何Rails应用不可或缺的一部分。使用RSpec进行行为驱动开发(BDD)测试,Rake任务自动化测试执行,确保购物车...

    Rails 3 in Action

    3. **MVC架构**:Rails采用Model-View-Controller架构,书中详细解释了模型(Model)、视图(View)和控制器(Controller)之间的交互与职责。 4. **路由**:Rails的路由系统允许灵活地定义URL到控制器动作的映射,...

    Ruby on Rails实践

    Rails还提供了丰富的插件和gem库,如Devise用于身份验证,CanCanCan处理权限控制,Pundit管理授权,Bootstrap-Sass和jQuery-rails用于前端界面和交互。开发者可以方便地通过Gemfile引入这些工具,然后利用Bundler...

    railsAPI

    在Rails API中,模型(Model)代表应用程序的数据结构,它与数据库交互,处理数据验证和业务逻辑。视图(View)是用户看到和与之交互的部分,而控制器(Controller)作为模型和视图之间的协调者,处理用户请求并决定...

    rails 项目起步示例

    Rails是Ruby语言的一个著名Web开发框架,全称为Ruby on Rails,它遵循MVC(Model-View-Controller)架构模式,旨在提高开发效率和代码可读性。本示例"rails项目起步示例"是一个购物系统,非常适合初学者入门学习。 ...

    Ruby on Rails 4 Tutorial 中文版

    同时,你会学到如何使用Rails的验证机制来保证数据的完整性和一致性。 在部署方面,Rails 4支持Heroku、Capistrano等工具,让你能够轻松将应用上线到生产环境。此外,还会有关于安全性的讲解,如CSRF(Cross-site ...

    Ruby on Rails入门经典代码

    Ruby on Rails,简称Rails,是基于Ruby语言的一个开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本压缩包中的"Ruby on Rails入门经典代码"提供了新手学习...

    rails-1.0.0

    Rails是一个基于Ruby编程语言的开源Web应用程序框架,遵循MVC(Model-View-Controller)架构模式,致力于实现“约定优于配置”(Convention over Configuration, CoC)和“Don't Repeat Yourself”(DRY)的原则,极...

    centOS Rails3环境搭建

    rails generate model article rails destroy model article ``` - **控制器创建**: ```bash rails generate controller products index ``` - **数据库迁移**:创建数据库和执行迁移: ```bash rake db:...

    [Rails 常用插件简介]CRUD Generator 2

    rails generate crud_generator2 ModelName ``` 这里的`ModelName`是你需要创建的模型名称。这个命令将会生成相应的模型文件、控制器文件、视图文件以及数据库迁移文件。 **4. 自定义生成的代码** 虽然CRUD ...

    web开发之rails最新调试通过购物车代码

    在Web开发领域,Ruby on Rails(简称Rails)是一种流行的开源框架,它基于MVC(Model-View-Controller)架构模式,用于快速构建高效、可维护的Web应用。本压缩包中的"web开发之rails最新调试通过购物车代码"是关于...

    Rails入门教程一(翻译).pdf

    此外,Rails提供了丰富的插件和gem(Ruby gem),例如Devise用于身份验证,CanCanCan处理授权,Paperclip或Carrierwave用于文件上传等,这些都能极大地增强应用的功能。 在开发过程中,Rails还提供了TDD(测试驱动...

    ruby on rails 2.3.5 api html版

    2. **Rails MVC结构**:模型(Model)处理数据和业务逻辑,视图(View)负责展示,控制器(Controller)协调两者。在Rails中,这些组件通过ActiveRecord、ActionView和ActionController被实现。 3. **ActiveRecord*...

Global site tag (gtag.js) - Google Analytics