如何在Rails 3.2中正确使用Flash消息

Dav*_*veG 4 controller flash-message twitter-bootstrap ruby-on-rails-3.2

当使用Twitter-Bootstrap的样式不正确地提交表单时,我试图简单地呈现flash消息.

我显然遗漏了一些东西,因为我一直收到以下错误:

TypeError in NewslettersController#create

can't convert Symbol into String
Run Code Online (Sandbox Code Playgroud)

代码如下

视图

        <div class="footer_newsletter_container">
            <%= image_tag("envelope.png", :border=>0, :class => '') %>&nbsp;&nbsp;Sign up for our newsletter</br></br>
            <%= simple_form_for Newsletter.new do |f| %>
              <%= f.input :email, :label => false, :placeholder => 'Enter Your Email Address', class: "floatleft" %><%= f.button :submit, 'Submit', class: "btn floatleft" %>
             <% end %>
            <%= render "layouts/messages" %>
        </div>
Run Code Online (Sandbox Code Playgroud)

局部

<% flash.each do |name, msg| %>
  <div class="alert alert-<%= name == :notice ? "success" : "error" %>">
    <a class="close" data-dismiss="alert">&#215;</a>
    <%= content_tag :div, msg, :id => "flash_#{name}" if msg.is_a?(String) %>
  </div>
<% end %>
Run Code Online (Sandbox Code Playgroud)

调节器

class NewslettersController < ApplicationController

  def create
      @newsletter = Newsletter.new(params[:newsletter])
      if @newsletter.save
        redirect_to :back, notice: "You have been added to our newsletter."
      else
        redirect_to :back, flash[:error] = "Oops, something went wrong. Please try again"
      end
  end

  def destroy
    @newsletter = Newsletter.find(params[:id])
    @newsletter.destroy
  end
end
Run Code Online (Sandbox Code Playgroud)

Dyl*_*kow 5

您的错误行应如下所示:

redirect_to :back, flash: {error: "Oops, something went wrong. Please try again"}
Run Code Online (Sandbox Code Playgroud)