रेल - स्ट्रिंग के लिए नियंत्रक क्रिया का नाम


160

मेरे पास एक रेल सवाल है।

मुझे नियंत्रक क्रिया के अंदर नियंत्रक क्रिया का नाम कैसे मिलेगा?

उदाहरण के लिए, के बजाय

def create
  logger.info("create")
end

मैं कुछ लिखना चाहता हूं

def create
  logger.info(this_def_name)
end

पाने का एक तरीका क्या है this_def_name?

जवाबों:


337

रेल 2.X :@controller.action_name

रेल 3.1.x : controller.action_name,action_name

रेल 4.X :action_name


5
या '3.0 में' index.action_name '। यह दृश्य में एक्शन नाम तक पहुंचने का सबसे अच्छा तरीका है।
19

2
यदि आप इसे before_filterकिसी ब्लॉक के साथ उपयोग करना चाहते हैं , तो करें before_filter { |controller| ... }stackoverflow.com/questions/2669663/…
बेंजामिन

3
FYI करें, action_nameरेल 3.2.13 में काम करता है, और controller.action_nameनहीं करता है।
Zach

रेल 2.3.XX और @ कंट्रोलर_नेचर_नाम काम नहीं करता है, आपको इस संस्करण के लिए सिर्फ एक्शन_नाम का उपयोग करना चाहिए।
mkralla11

क्या कोई प्रतीक संस्करण है?
बोगडान गूसिवे

34

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

वैकल्पिक रूप से आप रेल लॉग फॉर्मेट को कस्टमाइज़ करना चाह सकते हैं, ताकि एक्शन / मेथड का नाम आपके लॉग मैसेज में होने के बजाय फॉर्मेट द्वारा शामिल हो।


8
आप action_name को कॉल करके वर्तमान कार्रवाई को प्राप्त करने में सक्षम थे, मुझे यकीन नहीं है कि अगर यह अभी भी काम करता है, लेकिन मैंने हमेशा सोचा था कि यह params को क्वेरी करने से थोड़ा अच्छा था।
जोंनी

बस स्पष्ट करने के लिए, यह "कंट्रोलर.नेक्स्ट_नाम" या "परम [: एक्शन]" है, इसलिए आप <% कर सकते हैं यदि कंट्रोलर.नेच_नाम == 'नया'%> व्यू में। यह मेरे लिए रेल 3.2 में काम करता है।
डोनोपॉली

1
आप परमर्स [: कंट्रोलर]
ऐश ब्लू

action_name == 'new'(अविभाजित) अभी भी मेरे लिए रेल 3.2 में काम करता है
ब्रेंडन मुइर

17

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

<%= controller.controller_name %>

वापसी => 'उपयोगकर्ता'

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

<%= controller.action_name %>

वापसी => 'शो'

आईडी:

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

वापसी => '23'


7

यह स्निपेट रेल 3 के लिए काम करता है

class ReportsController < ApplicationController

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

end

छप जाएगा

। । ।
रिपोर्टकंट्रोलर.सुमरी
। । ।


3

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

पता चला कि यह self.current_method के साथ संभव है

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


-4

मैंने बस वही किया। मैंने इसे हेल्पर कंट्रोलर में किया, मेरा कोड है:

def get_controller_name
  controller_name    
end


def get_action_name
  action_name   
end

ये विधियाँ वर्तमान कॉनोलर और एक्शन नाम को लौटाएंगी। आशा करता हूँ की ये काम करेगा


39
भ्रामक। क्यों लपेटें controller_name, जो एक विधि है जो वर्तमान नियंत्रक का नाम देता है, एक अन्य विधि में जो सिर्फ कॉल करता है controller_name ? सिर्फ बुलावा क्यों नहींcontroller_name किया जाए और उसके साथ काम किया जाए?
पियरसैड्रियन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.