রেলস - স্ট্রিং থেকে কন্ট্রোলার অ্যাকশন নাম


160

আমার কাছে একটি কড়া প্রশ্ন আছে।

আমি কীভাবে নিয়ামক পদক্ষেপের ভিতরে একটি নিয়ামক অ্যাকশনের নাম পেতে পারি?

উদাহরণস্বরূপ, পরিবর্তে

def create
  logger.info("create")
end

আমি কিছু লিখতে চাই

def create
  logger.info(this_def_name)
end

কীভাবে পাব this_def_name?

উত্তর:


337

রেলগুলি 2. এক্স :@controller.action_name

পাগল 3.1.X : controller.action_name,action_name

রিয়েলস 4. এক্স :action_name


5
বা রেল ৩.০-এ 'কন্ট্রোলারঅ্যাকশন_নাম'। এই দর্শনটিতে ক্রিয়া নামটি অ্যাক্সেস করার সেরা উপায়।
এমএম

2
আপনি যদি before_filterএকটি ব্লক সহ এটিতে ব্যবহার করতে চান তবে করুন before_filter { |controller| ... }stackoverflow.com/questions/2669663/…
বেনিয়ামিন ওকস

3
এফওয়াইআই, action_nameরিয়েলগুলিতে কাজ করে 3.2.13, এবং controller.action_nameনা।
জাচ

রেলগুলি ২.৩.এক্সএক্স এবং @ কন্ট্রোল.অ্যাকশন_নাম কাজ করে না, আপনাকে অবশ্যই এই সংস্করণ (গুলি) এর জন্য কেবল অ্যাকশন_নাম ব্যবহার করতে হবে।
mkralla11

প্রতীক সংস্করণ আছে?
বোগদান গুসিভ

34

একটি রেল অ্যাকশনের নির্দিষ্ট ক্ষেত্রে (বর্তমান পদ্ধতির নাম পাওয়ার সাধারণ ক্ষেত্রে বিপরীতে) আপনি ব্যবহার করতে পারেন params[:action]

বিকল্পভাবে আপনি রেল লগ ফর্ম্যাটটি কাস্টমাইজ করার দিকে নজর রাখতে পারেন যাতে ক্রিয়া / পদ্ধতির নামটি আপনার লগ বার্তায় না গিয়ে ফর্ম্যাটে অন্তর্ভুক্ত থাকে।


8
আপনি অ্যাকশন_নামে কল করে আপনি বর্তমান ক্রিয়াটি অর্জন করতে সক্ষম হতেন, এটি এখনও কাজ করে কিনা তা সম্পর্কে আমি নিশ্চিত নই, তবে আমি সর্বদা ভাবতাম যে এগুলি প্যারামগুলি অনুসন্ধান করার চেয়ে কিছুটা সুন্দর ic
জান্নি

কেবল পরিষ্কার করার জন্য, এটি "কন্ট্রোলারঅ্যাকশন_নাম" বা "প্যারামগুলি [: ক্রিয়াকলাপ]", যাতে আপনি ভিউতে কন্ট্রোলারঅ্যাকশন_নেম == 'নতুন'%> করতে পারেন তবে এটি করতে পারেন। এটি আমার জন্য রেল ৩.২ এ কাজ করে।
ডমনোপলি

1
আপনি প্যারামগুলির মাধ্যমেও নিয়ন্ত্রকের নাম পেতে পারেন [: নিয়ন্ত্রক]
অ্যাশ ব্লু

action_name == 'new'(অপ্রত্যক্ষিত) এখনও আমার জন্য রেল ৩.২-তে কাজ করে
ব্রেন্ডন মুইর

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

মাইকেজের উত্তরটি খুব সুনির্দিষ্ট এবং সহায়ক ছিল, তবে আমি যে জিনিসটি জানতে চেয়েছিলাম সেটি হল কীভাবে রেললাইনে বর্তমান পদ্ধতির নাম পাওয়া যায়।

এটি স্ব.কমেন্ট_মোথড দিয়ে সম্ভব possible

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করা হবে না?
পাইয়ার্সিড্রিয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.