Rails has_and_belongs_to_many 数据验证方法 及 错误提示

luolinae86 · 2015年09月09日 · 最后由 douxiance 回复于 2015年09月09日 · 2495 次阅读

前言

数据验证能确保只有合法的数据才会存入数据库 数据存入数据库之前的验证方法

  • 模型中做验证(相对而言最有保障)
  • 数据库内建的约束
  • 客户端验证
  • 控制器层验证

本文重点分享一下,多对多关联模型层的数据验证方法,以及友好的用户提醒

验证场景

模型层

class User < ActiveRecord::Base
  has_and_belongs_to_many :roles
  attr_accessor :roles
end

用户 (user) 和角色 (role),多对多,即 has_and_belongs_to_many 的关系

系统要求,系统管理员在创建用户时,必须指明用户的角色,否则不能创建用户,系统需要给出友好提醒

控制器

class UsersController < ApplicationController
  def create
    @user = User.create(role_ids:params[:role_ids])
  end
end

验证方式

In Rails 3.2

class User < ActiveRecord::Base
  has_and_belongs_to_many :roles
  validate :minimum_one_role

  def minimum_one_role
    errors.add(:base, '请至少要选择一个角色') if roles.blank?
  end
end

In Rails 4

class User < ActiveRecord::Base
  has_and_belongs_to_many :roles
  validates :roles, presence: true
end

出错提醒

创建用户角色界面

此时,如果管理员不勾选用户角色为“研究者” ,“读片员“中的一个或多个

则调用 User.create 方法时,模型层对 roles 的数据验证出错,并将出错信息添加到 errors 错误集合中

显示错误信息

<% unless @user.blank? %>
  <% if @user.errors.any? %>
    <ul>
      <% @user.errors.each do |attr,msg| %>
        <li class="error_message"><%= msg %></li>
      <% end %>
    </ul>
  <% end %>
<% end %>

设置错误提醒的 css 样式为红色背景

.error_message{
  background-color: red;
}

看到楼主提供这么丰富的内容,好感动!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号