Michael Hartl双闪错误

时间:2015-03-18 20:04:14

标签: ruby-on-rails ruby

我一直在关注Michael Hartl指南并且我看到的唯一错误(但系统没有捕获),是每次有如下图所示的闪光时,警报会出现两次反对一次。我花了太长时间来解决这个问题。我在哪里编辑闪光灯行为。

http://imgur.com/Lws5z4o

这是我的用户控制器

class UsersController < ApplicationController

 before_action :logged_in_user, only: [:index, :edit, :update, :destroy]
 before_action :correct_user,   only: [:edit, :update]
 before_action :admin_user,     only: :destroy


  def index
    @users = User.paginate(page: params[:page])
  end

  def show
    @user = User.find(params[:id])
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)    # Not the final implementation!
    if @user.save
      UserMailer.account_activation(@user).deliver_now
      flash[:info] = "Please check your email to activate your account."
      redirect_to root_url
    else
      render 'new'
    end
  end

  def destroy
    User.find(params[:id]).destroy
    flash[:success] = "User deleted"
    redirect_to users_url
  end


  def edit
    @user = User.find(params[:id])
  end

  def update
    @user = User.find(params[:id])
    if @user.update_attributes(user_params)
       flash[:success] = "Profile Updated"
       redirect_to @user
    else
      render 'edit'
    end
  end

    private

   def user_params
          params.require(:user).permit(:name, :email, :password,
                                       :password_confirmation)
   end

  #Before filters

  def logged_in_user
    unless logged_in?
      store_location
      flash[:danger] = "Please log in."
      redirect_to login_url

    end
  end

 # Confirms an admin user.
    def admin_user
      redirect_to(root_url) unless current_user.admin?
    end

 # Confirms the correct user.
    def correct_user
      @user = User.find(params[:id])
     redirect_to(root_url) unless current_user?(@user)
    end

end

我的应用程序布局

<!DOCTYPE html>
<html>
  <head>
    <title><%= full_title(yield(:title)) %></title>
    <%= stylesheet_link_tag 'application', media: 'all',
    'data-turbolinks-track' => true %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
    <%= csrf_meta_tags %>
    <%= render 'layouts/shim' %>
    <!--[if lt IE 9]>
      <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/r29/html5.min.js">
      </script>
    <![endif]-->
  </head>
  <body>
    <%= render 'layouts/header' %>
    <div class="container">
     <% flash.each do |message_type, message| %>
     <%= content_tag(:div, message, class: "alert alert-#{message_type}") %>
        <div class="alert alert-<%= message_type %>"><%= message %></div>
      <% end %>
      <%= yield %>
    <%= render 'layouts/footer' %>
    <%= debug(params) if Rails.env.development? %>
    </div>
  </body>
</html>

2 个答案:

答案 0 :(得分:2)

更改...

<% flash.each do |message_type, message| %>
  <%= content_tag(:div, message, class: "alert alert-#{message_type}") %>
  <div class="alert alert-<%= message_type %>"><%= message %></div>
<% end %>

为...

  <% flash.each do |message_type, message| %>
    <%= content_tag(:div, message, class: "alert alert-#{message_type}") %>
  <% end %>

闪光行为不是问题所在。您已经两次呈现错误消息,因为您正在重复flash.each do ...块中的错误消息div。

答案 1 :(得分:0)

是的,非常清楚,看看你的循环:

<% flash.each do |message_type, message| %>
  <%= content_tag(:div, message, class: "alert alert-#{message_type}") %>
  <div class="alert alert-<%= message_type %>"><%= message %></div>
<% end %>

每个循环输出两个div(即每个闪存消息),一个使用content_tag帮助器,另一个使用<div文字文本。删除其中一个。