Rails 5 с Devise - как создать сообщение дня при входе в систему? - PullRequest
0 голосов
/ 28 ноября 2018

В нашем приложении Rails 5 меня попросили реализовать функцию, которая показывает пользователю сообщение об обновлении программного обеспечения с момента его последнего входа в систему и, возможно, позволяет ему делать общие объявления или сообщения дня.

Я в порядке с логикой для сравнения дат входа в систему, получения сообщений и тому подобного, но кажется, что для этого нужно каким-то образом взаимодействовать с процессом входа в Devise, возможно, с обратным вызовом, и я неесть идеи, как это сделать.Некоторые поиски в Google не привели меня ко многим.

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


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

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Одним из возможных решений было бы создание подкласса контроллера сеанса Devise , как описано в их README .

В методе SessionsController#create (или #new, в зависимости от того, что подходит для вашего приложения).) просто добавьте блок в виде

def create
  super do
    flash[:notice] = load_motd
  end
end
0 голосов
/ 28 ноября 2018

Таким образом, с помощью devise вы можете просто переопределить следующий контроллер

class UserSessionsController < Devise::SessionsController

   after_action :after_login, :only => :create
   def after_login
      flash[:message_of_the_day] = "Welcome to our site!" #or make some db query to grab your saved text.
   end
end

Затем, на ваш взгляд, вы можете отобразить флэш-сообщение так:

<h1><%= flash[:message_of_the_day] %></h1> 

Добавьте это к вашим маршрутамfile:

devise_for :users, :controllers => { :sessions => "user_sessions" }

Когда вы создаете нового пользователя, вам нужно будет создать файл user_registrations_controller.rb и поместить следующий код в этот файл.

class UserRegistrationsController < Devise::RegistrationsController

  after_action :after_sign_up, :only => :create   

  def after_sign_up
     if current_user.present?
       flash[:message_of_the_day] = "Welcome to our site"
     end
  end
end

Затем отредактируйте маршрут, чтобы он выглядел следующим образом:

devise_for :users, :controllers => { :sessions => "user_sessions", registrations: 'user_registrations' }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...