如何在控制器内组织带有验证错误的Flash消息

时间:2014-02-15 11:04:54

标签: flash validation ruby-on-rails-4 notice

以下是模型示例:

class User < ActiveRecord::Base

has_secure_password

validates :login, :presence => { :message => 'please, provide a password' }, :uniqueness => true
validates :password, :presence => true, :confirmation => true
...etc...
end    

以下是我在控制器中的内容:

class UsersController < ApplicationController

def create
@user = User.create(user_params)

if @user.save
 redirect_to(:action => 'login', :controller => 'access')
else
 redirect_to(:action => 'index', :controller => 'registration')
 flash[:notice] = @user.errors.full_messages   
 end
end

我在注册表格下有一个渲染功能:

<%= render 'layouts/error_messages' %>

部分视图本身:

<%# Rails flash messages styled for Bootstrap 3.0 %>
<% flash.each do |name, msg| %>
   <% if msg.is_a?(String) %>
     <div class="alert alert-<%= name == :notice ? "success" : "danger" %>">
       <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;  </button>
       <%= content_tag :div, msg, :id => "flash_#{name}" %>
     </div>
  <% end %>
<% end %>

它不起作用,所以我需要一只手。谢谢。

1 个答案:

答案 0 :(得分:0)

我认为它失败了,因为 msg 不是字符串,而是字符串数组,因此它不会显示。

我创建了一个方便的模块,我将其包含在我的应用程序控制器(flash.rb)中:

https://gist.github.com/Rabsztok/9018332

这允许我使用像

这样的简单方法在控制器中创建flash消息
if @user.save
  Emailer.email_confirmation(@user).deliver
  success 'Registered!'
else
  error_for @user
end

我还包括了我的部分用于显示flash(在你的布局中将它呈现在你喜欢的任何位置)和帮助器,使用metod创建方便的错误列表,可以放置在表单上并进行验证。它将创建带有错误列表的红色错误消息。