Почему: уведомление не отображается после перенаправления в Rails 3 - PullRequest
9 голосов
/ 26 января 2011

В моем контроллере есть следующий код

  def create
    @tv_show = TvShow.new(params[:tv_show])

    respond_to do |format|
      if @tv_show.save
        format.html { redirect_to(tv_shows_path, :notice => 'Tv show was successfully created.') }
        format.xml  { render :xml => @tv_show, :status => :created, :location => @tv_show }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @tv_show.errors, :status => :unprocessable_entity }
      end
    end
  end

и следующий в моем tv_shows / index.html.erb

<div id="notice"><%= notice %></div>

, но когда я создаю новую запись, уведомлениесообщение не появляется после перенаправления на tv_shows_path.У кого-нибудь есть идеи, почему?

Ответы [ 4 ]

17 голосов
/ 26 января 2011

Есть ли причина, по которой вы пытаетесь использовать :notice, а не flash[:notice]?

Контроллер:

 respond_to do |format|
  if @tv_show.save
    format.html { 
      flash[:notice] = 'Tv show was successfully created.'
      redirect_to tv_shows_path 
    }
    format.xml  { render :xml => @tv_show, :status => :created, :location => @tv_show }
  else
    format.html { render :action => "new" }
    format.xml  { render :xml => @tv_show.errors, :status => :unprocessable_entity }
  end
end

Вид:

<% if flash[:notice] %>
    <div id="notice"><%= flash[:notice] %></div>
<% end %>
4 голосов
/ 09 июля 2013

Я столкнулся с подобной «проблемой», и причина была в том, что я перенаправлял на действие, которое само по себе имело другое перенаправление.В приведенном выше случае наиболее вероятной причиной было то, что в пределах tv_shows_path существует другое перенаправление.

В моем случае у меня было что-то подобное в фильтре:

redirect_to root_url, notice: 'Unauthorized access!'

И root_url былоустановить на home#index:

# Home controller
def index
  if user_signed_in? && current_user.admin?
    redirect_to users_path
  else
    redirect_to customers_path
  end
end

Это второе перенаправление_то заставило мое уведомление «unauthorized_access» не появляться.

Решение состоит в том, чтобы просто немедленно перенаправить на customers_pathне до root_url.Надеюсь, это кому-нибудь поможет.

1 голос
/ 31 августа 2013

У меня была та же проблема, и ошибка была настолько глупой, но иногда незаметной.

У меня в макете приложения следующий код:

<div id="content" >
    <div class="wrapper">
        <% flash.each do |name, msg| %>
            <% content_tag :div, msg, class: "flash #{name}"%>
        <% end %>
        <%= yield %>
    </div>
</div>

Теперь вы можете понять, почемуЯ не смог увидеть мое флеш-сообщение?

Да!Вы должны проверить, поставили ли вы знак = здесь:

<%= content_tag :div, msg, class: "flash #{name}"%>
0 голосов
/ 27 января 2011

Причиной, по которой код не работал, была проблема с моим кодом аутентификации ... После того, как я реализовал свой новый способ аутентификации с нуля, приведенный выше код работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...