【问题标题】:Michael Hartl Double Flash ErrorMichael Hartl 双闪错误
【发布时间】:2015-03-18 20:04:13
【问题描述】:

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

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>

【问题讨论】:

  • 请在您的问题中添加三位代码:(1) 设置闪存的控制器代码,(2) 布局代码和 (3) 视图代码。跨度>
  • @smathy 我已经添加了代码,有什么建议吗?

标签: ruby-on-rails ruby


【解决方案1】:

改变...

<% 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,所以您要呈现两次错误消息。

【讨论】:

    【解决方案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 消息)输出两个 divs,一个使用 content_tag 帮助器,一个使用 &lt;div 文字文本。删除其中一个。

    【讨论】:

      猜你喜欢
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多