railscasts.com/episodes/270-authentication-in-rails-3-1

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

  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)

: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 %>
 Shaun28 янв. 2011 г., 05:32
@Fabian: Это сработало для вас?
 coder_tim26 янв. 2011 г., 01:24
Я думаю, что Шон прав насчет View, это должно быть "flash [: note]".
 m33lky31 дек. 2011 г., 03:43
:notice а также:alert принимаются вredirect_to в рельсах 3.
 maveonair26 янв. 2011 г., 07:36
Я читал, что это будет новый способ с рельсами версии 3 ... Но я попробую ваше предложение, спасибо!
 maveonair30 янв. 2011 г., 20:27
Код был верным, но у меня была проблема с аутентификацией, и из-за этого код не работал ...

и причина была в том, что я перенаправлял на действие, которое само по себе имело другое перенаправление. В приведенном выше случае наиболее вероятной причиной было то, что в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

Это второе redirect_to стало причиной того, что мое уведомление «unauthorized_access» не показывалось.

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

 Koby19 нояб. 2013 г., 20:57
Кроме того, вы можете сделатьflash.keep где происходит второе перенаправление (доredirect_to вызов). Это то, что я сделал, и, кажется, работает как ожидалось.
Решение Вопроса

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

 maveonair03 мая 2012 г., 12:49
Извините, но я больше не знаю, в чем была проблема год назад. На данный момент я использую has_secure_password начиная с Rails 3.1, и это прекрасно работает для меня.railscasts.com/episodes/270-authentication-in-rails-3-1
 Tim Scott15 мар. 2012 г., 17:43
Интересно, можете ли вы быть конкретным. У меня точно такая же проблема, и этот ответ не помогает. Мой контроллер имеетbefore_filter :authenticate_user!, Это неправильно?

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

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

<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}"%>
 Chuntao Lu12 янв. 2014 г., 04:40
вcontent_tag, так должно бытьmsg вместо:msg

Ваш ответ на вопрос