2009-08-07 4 views
127

स्ट्रिंग करने के लिए नियंत्रक कार्रवाई का नाम मेरे पास एक रेल प्रश्न है।रेल -

मैं नियंत्रक कार्रवाई के अंदर नियंत्रक कार्रवाई का नाम कैसे प्राप्त करूं?

उदाहरण के लिए

, बजाय

def create 
    logger.info("create") 
end 

मैं की तरह

def create 
    logger.info(this_def_name) 
end 

कुछ क्या एक तरह से this_def_name पाने के लिए है लिखना चाहते हैं?

उत्तर

287

रेल 2.X में पाया self.current_method साथ संभव है: @controller.action_name

रेल 3.1.x:, controller.action_nameaction_name

रेल 4.X: action_name

+5

या रेल 3.0 में' controler.action_name 'में मेरे लिए काम करता है। दृश्य में कार्रवाई नाम तक पहुंचने का यह सबसे अच्छा तरीका है। – emk

+2

नियंत्रक.एक्शन_नाम रेल 3.2 में भी काम करता है –

+2

यदि आप इसे ब्लॉक के साथ 'pre_filter' में उपयोग करना चाहते हैं, तो' first_filter {| नियंत्रक | ...} '। http://stackoverflow.com/questions/2669663/rails-before-filter-and-action-identification –

33

एक रेल कार्रवाई की विशेष मामले (के रूप में वर्तमान पद्धति नाम होने का सामान्य मामले के खिलाफ) आप उपयोग कर सकते params[:action]

वैकल्पिक रूप से आप रेल लॉग ऑन स्वरूप अनुकूलित करने में देखना चाहते हो सकता है कि कार्रवाई में तो/विधि नाम को आपके लॉग संदेश में होने के बजाय स्वरूप द्वारा शामिल किया गया है।

+8

आप ACTION_NAME फोन करके वर्तमान कार्रवाई प्राप्त करने में सक्षम हुआ करता था, मुझे नहीं लगता है कि अगर अभी भी काम करता है, लेकिन मैं हमेशा सोचा था कि यह एक सा क्वेरी करने से अच्छे था पैराम्स – jonnii

+1

action_name अभी भी काम करता है और सहमत है कि यह थोड़ा अच्छा है :) – mikej

+0

यह मेरे लिए रेल 3 में अब काम नहीं करता है। –

2

माइकज का जवाब बहुत सटीक और सहायक था, लेकिन जिस चीज को मैं जानना चाहता था वह था कि रेल में वर्तमान विधि का नाम कैसे प्राप्त करें।

पता चला यह

आसानी से http://www.ruby-forum.com/topic/75258

-4

मैंने अभी भी ऐसा ही किया है। मैंने इसे सहायक नियंत्रक में किया, मेरा कोड है:

def get_controller_name 
    controller_name  
end 


def get_action_name 
    action_name 
end 

ये विधियां वर्तमान contoller और action name लौटाएंगी। आशा है कि यह मदद करता है

+34

उलझन में। 'Controler_name' क्यों लपेटें, जो एक विधि है जो वर्तमान नियंत्रक का नाम लौटाती है, किसी अन्य विधि में जो केवल * कॉल *' नियंत्रक_नाम' है? क्यों न केवल 'नियंत्रक_नाम' को कॉल करें और इसके साथ किया जाए? – piersadrian

6

रेल 3

class ReportsController < ApplicationController 

    def summary 
    logger.debug self.class.to_s + "." + self.action_name 
    end 

end 

के लिए यह टुकड़ा काम करता है

प्रिंट होगा। । ।
रिपोर्ट्स नियंत्रक.summary
। । ।

10

नियंत्रक का नाम:

<%= controller.controller_name %> 

वापसी => 'उन'

कार्रवाई का नाम:

<%= controller.action_name %> 

वापसी => 'शो'

आईडी:

<%= ActionController::Routing::Routes.recognize_path(request.url)[:id] %> 

वापसी => '23'