2016-11-16 6 views
1

Я пытаюсь отобразить шаблон в ActionJob для трансляции через ActionCable.ActionCable + Devise + Pundit + ApplicationController.render

ApplicationController.render(partial: "messages/message", locals: { message: message }, assigns: { current_user: user}).squish 

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

<% if policy(message).show? %> 
    <%= message.body %> 
<% end %> 

Это вызывает ошибку при выполнении задания.

ActionView::Template::Error: Devise could not find the `Warden::Proxy` instance on your request environment. 

Быстрый поиск Google показывает этот вопрос: https://github.com/plataformatec/devise/issues/4271

Упомянутые в билете и ссылках, нет окр [ «смотритель»] доступно, потому что нет промежуточного слоя не выполняется, чтобы добавить его.

Как я могу обойти это?

+0

Вы проверили [это] (http://www.thegreatcodeadventure.com/using-action-controller-renderers-in-rails-5-with-devise/)? –

+0

@ArunKumar Да, это была одна из ссылок, упомянутых в билете. –

ответ

1

В качестве временного решения, это то, что я сделал:

class ActiveJobController < ActionController::Base 
end 

В моей частичной, вместо того, чтобы использовать policy помощника, я делаю это

<% if Pundit::PolicyFinder.new(message).policy.new(current_user, message).show? %> 
    <%= message.body %> 
<% end %> 

и от моего ActiveJob

ActiveJobController.render(partial: "messages/message", locals: { message: message, current_user: user }).squish 

Это позволяет избежать использования каких-либо предметов Помощники помощника и помощника, которые исправляют erences env["warden"]. Он не идеален, но работает на данный момент как при визуализации в запросе, так и в задании.

+0

Ты спас мой день. Большое спасибо. – Chamnap

Смежные вопросы