#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