我是
靠谱客的博主
甜美酸奶,这篇文章主要介绍
Ruby on Rails——一个完整的例子(五),现在分享给大家,希望可以做个参考。
这一节我们来学习一下Rails的有效性验证。
在自动生成的app/models/article.rb文件中,只有这么简短的一段代码:
| class Article < ApplicationRecord end |
这段代码说明Article这个model继承自ApplicationRecord。实际上,ApplicationRecord继承自ActiveRecord::Base,而ActiveRecord已经封装了许多model相关的操作,包括对数据库的CRUD,数据有效性验证,以及一些复杂的搜索支持。
除此之外,我们也可以通过在model文件中使用validates方法,编写一些自己定制化的有效性验证。将app/models/article.rb文件修改如下:
| class Article < ApplicationRecord validates :title, presence: true, length: { minimum: 5 } end |
这段代码要求我们创建的article需要满足title的长度大于5,那么根据title的长度的不同我们应该做什么样不同的处理呢?这个时候我们就需要修改上一节我们写过的controller的代码,将app/controllers/articles_controller.rb文件修改如下:
| def new @article = Article.new end def create @article = Article.new(article_params) if @article.save redirect_to @article else render 'new' end end private def article_params params.require(:article).permit(:title, :text) end |
controller的修改虽然显示根据title长度的不同,我们可以看到不同的页面,但是由于我们尚未对view进行修改,实际上我们此时看到的页面并没有什么不同。我们需要对app/views/articles/new.html.erb进行补充关于title判断的内容,修改如下:
| <%= form_with scope: :article, url: articles_path, local: true do |form| %> <% if @article.errors.any? %> <div id="error_explanation"> <h2> <%= pluralize(@article.errors.count, "error") %> prohibited this article from being saved: </h2> <ul> <% @article.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div> <% end %> <p> <%= form.label :title %><br> <%= form.text_field :title %> </p> <p> <%= form.label :text %><br> <%= form.text_area :text %> </p> <p> <%= form.submit %> </p> <% end %> <%= link_to 'Back', articles_path %> |
我们使用@article.errors.any?对model中定义的验证条件进行检测,检查页面上是否存在错误;使用@article.errors.full_messages显示错误信息。
启动rails server后,访问 http://localhost:3000/articles/new,如果title不满足数据有效性条件的话,就会报错了。

备注:在上文中并没有强调把controller的new方法加入@article = Article.new这行代码,在直接访问时出现如下错误,因为nil并不存在errors方法。

最后
以上就是甜美酸奶最近收集整理的关于Ruby on Rails——一个完整的例子(五)的全部内容,更多相关Ruby内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复