flash message not displaying after redirect or render

ruby-on-rails

Solution

You are setting your `flash[:notice]` after redirect. Try switching the order of those calls i.e. set the flash message first then redirect second:

def create
    @salary_report = SalaryReport.create(salary_report_params)
    if @salary_report.save  
      flash[:notice] = "Lönerapporten sparades korrekt!"
      puts "salary report saved #{flash[:notice]}"
      redirect_to @salary_report
    else
      render :new, notice: "Något gick fel när lönerapporten skulle sparas!"      
    end
  end

Problem

Using rails 4 and ruby 2 Having trouble displaying the flash messages from my controllers. My method looks like this: ``` def create @salary_report = SalaryReport.create(salary_report_params) if @salary_report.save redirect_to @salary_report flash[:notice] = "Lönerapporten sparades korrekt!" puts "salary report saved #{flash[:notice]}" else render :new, notice: "Något gick fel när lönerapporten skulle sparas!" end end ``` As you can see, I have added a puts statement printing out the flash notice just to prove that the flash notice is getting generated after the redirect. The logs look like this after creating a salary report: ``` Redirected to http://localhost:3000/salary_reports/20 salary report saved Lönerapporten sparades korrekt! Completed 302 Found in 25ms (ActiveRecord: 9.7ms) ``` After getting to show view logs: ``` Started GET "/salary_reports/22" for 127.0.0.1 at 2013-07-24 16:08:42 +0200 Processing by SalaryReportController#show as HTML Parameters: {"id"=>"22"} SalaryReport Load (0.5ms) SELECT "salary_reports".* FROM "salary_reports" WHERE "salary_reports"."id" = ? LIMIT 1 [["id", "22"]] Document Lo ad (0.3ms) SELECT "documents".* FROM "documents" WHERE "documents"."salary_report_id" = ? [["salary_report_id", 22]] Rendered salary_report/show.html.erb within layouts/application (6.1ms) User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = 3 ORDER BY "users"."id" ASC LIMIT 1 Completed 200 OK in 62ms (Views: 58.0ms | ActiveRecord: 1.1ms) ``` In the view, I show the messages with this: ``` <% flash.each do |name, msg| %> <% if msg.is_a?(String) %> <div class="alert alert-<%= name == :notice ? "success" : "error" %>"> <a class="close" data-dismiss="alert">&#215;</a> <%= content_tag :div, msg, :id => "flash_#{name}" %> </div> <% end %> <% end %> ``` I have tried a variety of different ways to write the controller method but nothing seems to help. Very uncertain about what the problem could be.

Original source