Стимульный рефлекс доступа к переменной контроллера приложения
Я использую эту переменную экземпляра (@profile), объявленную в контроллере приложения, чтобы проверить, есть ли у текущего пользователя права на доступ к параметрам [:profile_id]
class ApplicationController < ActionController::Base
before_action :set_profile
def set_profile
if params[:profile_id].present? && current_user
@profile = Profile.joins(:ownerships).find_by(profiles: {id: params[:profile_id]}, ownerships: {user: current_user})
end
end
end
Как мне получить доступ к той же переменной @profile в действии Reflex? В противном случае любой пользователь мог бы изменить DOM и отредактировать поле Id.
class ItemGroupReflex < ApplicationReflex
def state
Post.find_by(id: element.dataset[:id], profile: @profile).update(state: 'enabled')
end
end
1 ответ
Нет прямого способа доступа к методам или instance_variables вашего ApplicationController, так как он будет создан только после вашего рефлекса.
Но вы можете создать тот же метод в своем
ApplicationReflex
в
before_reflex
Перезвони:
# app/reflex/application_reflex.rb
class ApplicationReflex < StimulusReflex::Reflex
before_reflex :set_profile
def set_profile
if params[:profile_id].present? && current_user
@profile = Profile.joins(:ownerships).find_by(profiles: {id: params[:profile_id]}, ownerships: {user: current_user})
end
end
end
Чтобы иметь доступ к вашему current_user, убедитесь, что он доступен на
application_controller/connection
, ищите аутентификацию в документации.
Конечно, вы также можете выделить этот метод в проблему или модуль, чтобы у вас была только одна реализация.