क्या मैं हथौड़ा के साथ एक स्क्रू ड्राइव करने की कोशिश कर रहा हूं?
एर, संभवतः ;-)
यदि मैं यह सही ढंग से पढ़ रहा हूँ, तुम एक स्थिति एक नियंत्रक के अंतर्गत गतिविधियों को विभिन्न पहुँच स्तर है जहां है, तो आप एक ही चैक बनाकर दोहराव निकालना चाहते हैं समारोह?
तो आप ऐसा कुछ करने के लिए देख रहे हैं?
before_filter :check_role('admin'), :only => [:admin, :debug]
before_filter :check_role('power'), :only => [:edit, :delete]
लेकिन माता-पिता की चीज़ में पैरामीटर कानूनी नहीं है। और वैसे भी, मैं अभी भी डुप्लिकेशंस का एक उचित बिट देखता हूं!
सामान्य रूप से, कार्यक्षमता के क्षेत्र के साथ-साथ नियंत्रक फ़िल्टर के रूप में भी जाना जाता है, यदि आप कुछ नहीं कर सकते हैं, तो संभवतः क्योंकि आप कुछ गलत तरीके से देख रहे हैं। (याद रखें कि रेल को खुद को "रायषित सॉफ़्टवेयर" के रूप में वर्णित करने पर गर्व है!)
यदि आप अपनी फ़िल्टर विधि में कार्रवाई का नाम जान सकें तो यह कैसा होगा?
फिर हम
before_filter :check_role
कौन सा सुंदर DRY है होगा।
हम एक हैश में अनुमतियाँ निर्धारित कर सकते हैं, शायद:
Perms = { :admin => ['admin'], :edit => ['admin', 'power'], etc
... जो दोहराव के विशिष्ट तत्वों को संपुटित करने लगते हैं। यदि यह जटिल हो गया है तो पूरी चीज एक टेबल में जा सकती है, हालांकि आप प्लगइन में पहले से ही उपलब्ध कार्यक्षमता को डुप्लिकेट कर रहे हैं।
और हम होगा
protected
def check_role
for required_role in Perms[params[:action]]
return if logged_in_user.has_role? required_role
end
flash[:notice] = 'Access to that area requires additional privileges.'
redirect_to :back
end
या कुछ इसी तरह की। पैराम्स [: एक्शन] मेरे वर्तमान रेल संस्करण (2.1.2) पर काम करता है, हालांकि रेल बुक (v2) action_name
विधि का उल्लेख करता है जो मेरे लिए खाली लौटता प्रतीत होता है।
कहाँ "नियंत्रक" का मान सेट करने के परम करता पाया जा सकता है? – Ethan
पहले_फिल्टर ब्लॉक पर नियंत्रक ऑब्जेक्ट उत्पन्न करेगा। यदि आप रुबी के ब्लॉक प्रारूप से परिचित नहीं हैं, तो पाइप (यानी ||) ब्लॉक को पारित पैरामीटर को सीमित कर देता है। (एफवाईआई, आप यहां जो कुछ भी चाहते हैं उस पैरामीटर का नाम दे सकते हैं; मैंने इसे "नियंत्रक" नाम दिया है जो कि क्या हो रहा है, इस पर स्पष्ट होना चाहिए) –
यह काम करता है। धन्यवाद। मॉड्यूल नाम – Ethan