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

我想实时制作我的应用程序

这是我的错误

ActionView::Template::Error (Devise Could not find the Warden::Proxy instance on your request environment.
Make sure that your application is loading Devise and Warden as expected and that the Warden::Manager middleware is present in your middleware stack.
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.)
1: -if user_signed_in?
2: .ui.popup.computer{id:”post#{post.id}user#{post.user.id}”,style:”padding:0px”}
3: .ui.card
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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...