Od wersji Rails 5.2 możemy teraz dodać magiczny Singleton "Current", który działa jak globalny magazyn dostępny z dowolnego miejsca w aplikacji:
Zatem tworzymy model:
#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
before_action :set_current_user, if: :user_signed_in?
private def
set_current_user Current.user = current_user
end
end
#app/models/current.rb
class Current < ActiveSupport::CurrentAttributes
attribute :user
end
Dzięki temu uzyskasz w widoku, bądż modelu dostęp do "current_user" używając "Current.user".
#static_pages/landing_page.html.erb
<%= Current.user.username %>
#app/models/post.rb
class Post < ApplicationRecord
belongs_to :user, default: -> { Current.user }
validates :title, presence: true
end