2016-08-24 10 views
7

मैं वास्तविक समय में मेरे ऐप बनाना चाहते साथ रेल 5 से Aplication.renderer.render का उपयोगकैसे वसीयत

यह मेरी त्रुटि

ActionView :: खाका :: त्रुटि है (वसीयत नहीं पा सके Warden::Proxy आपके अनुरोध पर्यावरण पर उदाहरण। सुनिश्चित करें कि आपका एप्लिकेशन अपेक्षित के रूप में डेविस और वार्डन लोड कर रहा है और Warden::Manager मिडलवेयर आपके मिडलवेयर स्टैक में मौजूद है। यदि आप इसे अपने परीक्षणों में से एक देख रहे हैं, तो सुनिश्चित करें कि आपके परीक्षण हैं या तो रेल मिडलवेयर स्टैक को निष्पादित करना या आपके परीक्षण का उपयोग कर रहे हैं Devise::Test::ControllerHelpers मॉड्यूल आपके लिए request.env['warden'] ऑब्जेक्ट इंजेक्ट करने के लिए।)
1: -if user_signed_in?
2: .ui.popup.computer {आईडी: "पोस्ट # {post.id} उपयोगकर्ता # {post.user.id}", शैली: "पैडिंग: 0px"}
3: .ui.card
4: .image

मैं क्या करना है

मेरी मदद कृपया पता नहीं है।

+0

मैं नहीं मिला है उचित समाधान के लिए

renderer = ApplicationController.renderer_with_signed_in_user(user) renderer.render template: 'notifications/show', layout: false, locals: { foo: 'bar' } 

क्रेडिट स्टीफन Wienert के लिए अभी तक, लेकिन यहां कुछ लिंक हैं FYI: https://evilmartians.com/chronicles/new-feature-in-rails-5-render-views-outside-of-actions, http://www.thegreatcodeadventure.com/using-action- नियंत्रक-प्रस्तुतकर्ता-इन-रेल -5-साथ-devise/ – artificis

उत्तर

-1

जब आप नए रेल 5 एप्लिकेशन रेंडरर का उपयोग करते हैं, तो कोई मिडलवेयर निष्पादित नहीं होता है। डेविस वार्डन का उपयोग करता है और इसे एक एनवायरनमेंट वेरिएबल एनवी ['वार्डन'] के रूप में सेट करता है, और इस प्रकार जब आप रेंडरर कहते हैं तो यह गायब है। यही कारण है कि आपको यह त्रुटि क्यों मिलती है।

इसे काम करने के लिए, अपने नियंत्रक में बस नियंत्रक # क्रिया के लिए पहले_एक्शन का उपयोग करें जो आपको आवृत्ति चर सेट करने और पास करने के लिए प्रस्तुत किया जाएगा।

आप अगर उपयोगकर्ता के प्रवेश की जाँच करें, या प्रदान की गई दृश्य में current_user उपयोग करने के लिए की जरूरत है:

class ExamplesController < ApplicationController 
    before_action :user_logged_in?, only: :show 
    before_action :set_user, only: :show 

def show 
    # whatever the action does 
end 

private 
    def user_logged_in? 
    @user_logged_in = user_signed_in? 
    end 

    def set_user 
    @user = current_user 
    end 
end 

तब दृश्य ExamplesController # शो में:

# views/examples/show.html.erb 

<%= "Online" if @user_logged_in %> 
<%= @user.full_name %> 

आशा है कि

में मदद करता है
+0

मुझे लगता है कि वें ई प्रश्नकर्ता की समस्या नियंत्रक के बाहर टेम्पलेट प्रस्तुत करने की कोशिश कर रही है। – artificis

0

मुझे लगता है कि मुझे अपने मामले के लिए एक समाधान मिला है।

कक्षा विधि 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) 
    } 
    renderer.new('warden' => proxy) 
    end 
    ... 
end 

और फिर आप रेल एप्लिकेशन के अन्य भागों, इस तरह से प्रस्तुत कर सकते हैं: अपने article

संबंधित मुद्दे