ruby-on-rails – 如何使用带有设计的rails 5中的Aplication.renderer.render

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何使用带有设计的rails 5中的Aplication.renderer.render前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想实时制作我的应用程序

这是我的错误

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 the Warden::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 the Devise::Test::ControllerHelpers module to inject the request.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

猜你在找的Ruby相关文章