我想实时制作我的应用程序
这是我的错误
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 theWarden::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 theDevise::Test::ControllerHelpers
module to inject therequest.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
我不知道该怎么办
请帮帮我。
最佳答案
我想我为我的情况找到了解决方案。
定义 renderer_with_signed_in_user
ApplicationController
中的类方法.
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-on-rails - 如何使用 Rails 5 中的 Application.renderer.render 和设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39128798/