Рельсы 5… Нет сообщения о флэш-уведомлении

#ruby-on-rails

#ruby-on-rails

Вопрос:

Я следую онлайн-руководству Майкла Хартла по Rails 5. Я нахожусь в части игрушечного приложения. У меня есть простой пользовательский каркас. Когда я создаю нового пользователя, я перенаправляюсь на шаблон показа, но содержимое сообщения о флэш-уведомлении не отображается.

Код контроллера выглядит следующим образом:

 def create
@user = User.new(user_params)

respond_to do |format|
  if @user.save
    format.html { redirect_to @user, notice: 'User was successfully created.' }
  end
end
end
  

Код просмотра здесь:

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

Элемент P создается и получает соответствующие стили CSS, но сообщение ему не передается.

В принципе, я получаю это для своего вывода:

 <p id="notice"></p>
  

Я добавил это в представление:

 <% if flash[:notice].blank? %>
  <h1> flash notice is blank </h1>
<% end %>
  

… и я получаю сообщение о том, что уведомление о вспышке пустое.

Я на Rails 5.0.0.1 и Ruby 1.3.2. Спасибо.

Комментарии:

1. Ваш стиль CSS не скрыт или не скрыт при условии сообщения?

2. Нет, он отлично подбирает стили #notice из файла scaffold.css.

3. И, насколько я могу судить, в сообщении нет никаких условий.

Ответ №1:

Итак, это связано с правкой, которую я внес в файл application_controller.rb. В первый раз, когда я попытался создать нового пользователя, я получил сообщение об ошибке:

ActionController::InvalidAuthenticityToken в UsersController#создать

Чтобы исправить это, во второй строке моего файла application_controller.rb я изменил это:

 protect_from_forgery with: :exception
  

к этому:

 protect_from_forgery with: :null_session
  

Я предполагаю, что это, так сказать, «аннулировало» мой сеанс, поэтому некоторые переменные сеанса не передаются, включая флэш-сообщения?

В любом случае, это изменение позволило мне нормально создавать новых пользователей, но затем я обнаружил, что сообщения с уведомлением о вспышке не отображаются.

Чтобы исправить это, я изменил :null_session обратно на :exception в файле application_controller, а затем добавил новую строку в свой файл users_controller.rb, который пропускает проверку токена аутентификации для новых пользователей. Это, вероятно, не подходит для производства, но для ознакомления с руководством это начало:

 class UsersController < ApplicationController
  skip_before_action :verify_authenticity_token