这是我的错误
ActionView::Template::Error (Devise could not find the
Warden::Proxy
instance on your request environment.@H_502_8@ Make sure that your application is loading Devise and Warden as expected and that theWarden::Manager
middleware is present in your middleware stack.@H_502_8@ If you are seeing this on one of your tests,ensure that your tests are either executing the Rails middleware stack or that your tests are using theDevise::Test::ControllerHelpers
module to inject therequest.env['warden']
object for you.)@H_502_8@ 1: -if user_signed_in?@H_502_8@ 2: .ui.popup.computer{id:”post#{post.id}user#{post.user.id}”,style:”padding:0px”}@H_502_8@ 3: .ui.card@H_502_8@ 4: .image
我不知道该怎么办
请帮帮我.
解决方法
在ApplicationController中定义renderer_with_signed_in_user类方法.
class ApplicationController < ActionController::Base ... def self.renderer_with_signed_in_user(user) ActionController::Renderer::RACK_KEY_TRANSLATION['warden'] ||= 'warden' proxy = Warden::Proxy.new({},Warden::Manager.new({})).tap { |i| i.set_user(user,scope: :user,store: false,run_callbacks: false) } renderer.new('warden' => proxy) end ... end
然后你可以从Rails应用程序的其他部分渲染,如下所示:
renderer = ApplicationController.renderer_with_signed_in_user(user) renderer.render template: 'notifications/show',layout: false,locals: { foo: 'bar' }
感谢Stefan Wienert的article