`

Rails validate 关于ActiveRecord 的输入检查

阅读更多
   通常情况下,如果我们有一个小需求要检查用户在注册的时候输入的用户名是不是重复,那么,我们会怎么做呢。应该比较大众的做法是:
validates_uniqueness_of :name


   这是没有问题的,但是,在类级别的定义验证检查通常并不是好办法。例如,你希望能够加一个友好的错误提示并给一个链接如下:
validates_uniqueness_of :name, :message => "The name {{value}} is taken. <a href="/login">Log in</a> instead?"


类级别这样定义的不好如下:
引用
Did you see the use of {{value}} in there? That’s because ActiveRecord’s DSL for validations operates on a class level, and that means that when you are declaring the validation, you don’t have access to the instance you will be dealing with. Note also that there’s HTML in the error message. It’s nice to point the user in the right direction, and here it only makes sense to send the user to the login page. But HTML in the models is wrong in many levels, not to mention that the URL helpers are not available there.

放到示例里就应该这样:
def validate
  validates_uniqueness_of :name, :message => "The name #{name} is taken. <a href="/login">Log in</a> instead?"
end


同样的,还可以有如下的例子:
在类里定义的话如下:
validates_presence_of :card_number, :if => :paid_with_card?

def paid_with_card?
  payment_type == "card"
end


这时的作用范围会出错,放到示例如下:
def validate
  validates_presence_of :card_number if paid_with_card?
end


validates_presence_of :surname, :if => "name.nil?"



def validate
  validates_presence_of :surname if name.nil?
end




validates_confirmation_of :password,
  :unless => Proc.new { |a| a.password.blank? }




def validate
  validates_confirmation_of :password unless password.blank?
end


分享到:
评论

相关推荐

    Ruby on Rails中的ActiveRecord编程指南

    本文档旨在为开发者提供一系列关于如何高效、规范地使用ActiveRecord进行编程的建议。 #### 二、遵循约定优于配置原则 **避免改动缺省的ActiveRecord(表的名字、主键等)** 除非有非常充分的理由(例如需要与外部...

    使用ActiveRecord验证密码强度_Ruby_下载.zip

    在Ruby开发中,ActiveRecord是Rails框架的一部分,用于处理数据库操作和对象关系映射(ORM)。在用户注册或账户管理时,确保用户设置的密码具有足够的强度是非常重要的,以防止轻易被破解。这个资料包“使用...

    rails22新添功能.pdf

    例如,可以设置`belongs_to :developer, validate: false`来避免在保存主对象时检查关联对象的有效性。这提供了更大的灵活性,允许在某些情况下即使关联对象无效也能保存主对象。 ```ruby class AuditLog &lt; ...

    ruby on rails 实例代码

    首先,Rails使用ActiveRecord作为其ORM(对象关系映射)层,使得开发者可以以面向对象的方式与数据库交互。ActiveRecord将数据库表映射为Ruby类,数据库记录映射为类的实例。例如,如果你有一个名为`User`的模型,它...

    使用rails6开发纯后端API项目.zip

    使用Rails 6创建一个新的API项目非常简单,只需在命令行输入: ``` rails new my_api --api ``` `--api`标志会创建一个精简版的Rails应用,移除了不必要的视图、资产管道和Sprockets,专注于处理HTTP请求和响应...

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

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

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

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

    Rails扩展框架Trailblazer.zip

    Trailblazer 是基于 Rails 的一个瘦的封装层,加强了代码的封装使用,更直观的代码结构和面向对象架构。是一种概念驱动的架构模型,项目目录如下: app├── concepts│ ├── comment│ │ ├── cell.rb│ ...

    validate_mx_record:用于验证电子邮件是否具有有效 mx 记录的 gem

    当用户输入电子邮件地址时,`validate_mx_record` 将会检查该地址背后的域名是否配置了正确的 MX 记录。这样可以避免因无效邮件地址导致的邮件发送失败,提高应用的用户体验和数据质量。 描述中提到,这个 gem 包含...

    validates_type:Rails的类型验证

    validates_typeRails类型验证目的大多数... ActiveRecord :: Base # validate that attribute :bar is a String validates_type :bar , :string # validate that attribute :baz is an Integer with a custom error

    ruby on rails 3.1.0数据库查询方法汇总

    - **注意**:`destroy` 方法会触发 ActiveRecord 的回调事件,而 `delete` 方法不会。 13. **统计查询**: - `Category.count`:获取记录总数。 - `Category.average(:position)`:计算 `position` 字段的平均值...

    validates_url:Rails的URL验证

    安装将此添加到您的Gemfile : gem "validate_url" 或自己安装: sudo gem install validate_url用法使用ActiveRecord class Pony &lt; ActiveRecord :: Base # standard validation validates :homepage , url : ...

    验证_锻炼

    1. **ActiveRecord验证**:在Ruby on Rails中,ActiveRecord模型提供了内置的验证工具,例如`validates`, `validates_format_of`, `validates_length_of`等,这些方法可以帮助开发者检查模型实例的数据是否符合预设...

    Ruby-GuacamoleArangoDB的ODM框架

    Ruby-Guacamole是针对ArangoDB数据库的一个Object-Document Mapping (ODM)框架,它为开发者提供了一种更方便的方式来操作ArangoDB中的数据,类似于Ruby on Rails中的ActiveRecord。ODM允许开发者以对象的形式操作...

    强制执行密码强度要求,例如长度和随机性_Ruby_.zip

    如果是在Rails框架下工作,可以利用ActiveRecord的验证功能,比如`validates_length_of`、`validates_complexity_of`等。例如: ```ruby class User validates :password, presence: true, length: { minimum: ...

    Ruby-GemEnumize扩展ActiveRecordEnum增加实用方法

    `ActiveRecord::Enum`是Rails框架提供的一种方便的方式来处理这种枚举,但它的功能相对有限。为了弥补这些不足,`Ruby-Gem Enumize`应运而生,它是一个扩展`ActiveRecord::Enum`的库,提供了更多的实用方法和灵活性...

    Ruby-Reform能够给你一个Form对象模型包含验证和嵌套设置

    在传统的Rails应用中,表单处理通常涉及到大量的控制器代码,这不仅让代码变得杂乱,还增加了出错的可能性。Reform引入了Form对象的概念,它是一个单独的类,负责处理表单的验证规则、映射以及与模型之间的交互。...

    sinatra-mailing-list-boilerplate:SinatraActiveRecord 邮件列表注册表单

    可能的实现包括使用原生JavaScript或者库如jQuery来监听表单事件,检查输入值,并实时向用户提供反馈。例如,可以使用jQuery的`submit`事件阻止无效提交: ```javascript $("#subscription-form").submit(function...

    图书管理系统报告.pdf

    创建项目时,通过命令行输入以下指令: ```sh rails new management_books cd management_books ``` 接下来生成scaffold以快速构建出CRUD的基本结构: ```sh script/generate scaffold book \ author:string ...

Global site tag (gtag.js) - Google Analytics