• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Ruby on Rails——一个完整的例子(五)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

这一节我们来学习一下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方法。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
一步一步学Ruby(四):Ruby标准类型发布时间:2022-07-14
下一篇:
Ruby:线程实现经典的生产者消费者问题发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap