मेरे पास Events
नियंत्रक है जिस पर मैं प्रामाणिकता को छोड़ना चाहता हूं, घटना घटना सार्वजनिक है।सशर्त रूप से skip_before_filter को लागू करें: if => रेल में स्थिति 4
मेरे ApplicationController
मैं तैयार करने के authenticate_user!
class ApplicationController < ActionController::Base
before_action :authenticate_user!
end
अब, मेरे घटनाक्रम तालिका के अंदर, मैं एक बूलियन क्षेत्र public
कहा जाता है इस फोन है। मैं यह जांचने के लिए उपयोग करता हूं कि घटना सार्वजनिक है या नहीं। EventsController
class EventsController < ApplicationController
skip_before_action :authenticate_user!, only: :show, if: Proc.new { :is_public? }
end
लेकिन किसी कारण से इस तरह, यह काम नहीं किया। तो मैं यह करने के लिए किया था:
class EventsController < ApplicationController
skip_before_action :authenticate_user!, only: :show
before_action :authenticate_user!, unless: :is_public?
def is_public?
@event.present? && @event.is_public
end
end
यह काम करता है के रूप में की उम्मीद है और प्रमाणीकरण अगर @event.public = true
क्योंकि ऊपर लंघन के बाद उलटा शर्त के साथ before_filter
दोहराता को छोड़ दें।
मैं सोच रहा हूँ:
- मैं क्या किया सही है?
- क्या इसका कोई प्रदर्शन प्रभाव पड़ता है। यदि हां, तो क्या कोई बेहतर तरीका है?
कोड के दूसरे खंड में, आप उद्देश्य पर प्रश्न चिह्न भूल गए? 'Proc.new {: is_public}' – Damien
नोप्स। मैं वास्तव में यह ': if => conditonal' काम नहीं कर सका, इसलिए सुनिश्चित नहीं है कि यह': is_pulic? 'या ': is_public' – CuriousMind
यदि आपके पास' सार्वजनिक 'फ़ील्ड है, तो यह' सार्वजनिक 'या' सार्वजनिक? '। यदि आप इसका उपयोग करना चाहते हैं तो 'is_public?' विधि को अपने 'ईवेंट' मॉडल पर ले जाएं। – Damien