ruby on rails - Rails মধ্যে বর্তমান রুট কিভাবে আমি খুঁজে পেতে পারি?



ruby-on-rails routing (9)

আমি Rails একটি ফিল্টার বর্তমান রুট জানতে হবে। আমি কিভাবে এটা খুঁজে পেতে পারেন?

আমি রিস্ট রিসোর্স করছি, এবং কোন নাম নেই রুট দেখুন।

https://ffff65535.com


@ এএমএনএএনএন পরামর্শের উপর ভিত্তি করে (আরো বিস্তারিত):

class ApplicationController < ActionController::Base

 def current_controller?(names)
  names.include?(params[:controller]) unless params[:controller].blank? || false
 end

 helper_method :current_controller?

end

এখন আপনি তালিকা হিসাবে আইটেম আইটেম চিহ্নিত করার জন্য একটি নেভিগেশনের বিন্যাসে এটি কল করতে পারেন:

<ul class="nav nav-tabs">
  <li role="presentation" class="<%= current_controller?('items') ? 'active' : '' %>">
    <%= link_to user_items_path(current_user) do %>
      <i class="fa fa-cloud-upload"></i>
    <% end %>
  </li>
  <li role="presentation" class="<%= current_controller?('users') ? 'active' : '' %>">
    <%= link_to users_path do %>
      <i class="fa fa-newspaper-o"></i>
    <% end %>
  </li>
  <li role="presentation" class="<%= current_controller?('alerts') ? 'active' : '' %>">
    <%= link_to alerts_path do %>
      <i class="fa fa-bell-o"></i>
    <% end %>
  </li>
</ul>

users এবং alerts রুট, current_page? যথেষ্ট হবে:

 current_page?(users_path)
 current_page?(alerts_path)

কিন্তু নেস্টেড রুট এবং একটি নিয়ামক ( items সঙ্গে তুলনীয়) সব কর্মের জন্য অনুরোধ, current_controller? আমার জন্য ভাল পদ্ধতি ছিল:

 resources :users do 
  resources :items
 end

প্রথম মেনু এন্ট্রিটি নিম্নোক্ত রুটগুলির জন্য সক্রিয় ভাবে রয়েছে:

   /users/x/items        #index
   /users/x/items/x      #show
   /users/x/items/new    #new
   /users/x/items/x/edit #edit

Railsapplication.routes বস্তুর মাধ্যমে আপনি Rails :: মাউন্ট :: রুটসেট অবজেক্টটি অ্যাক্সেস করতে পারেন, তারপরে সরাসরি এটিতে কল করুন

route, match, params = Rails.application.routes.set.recognize(controller.request)

যে প্রথম (সেরা) ম্যাচ পায়, নিম্নলিখিত ব্লক ফর্ম মিলিত রুট উপর loops:

Rails.application.routes.set.recognize(controller.request) do |r, m, p|
  ... do something here ...
end

একবার আপনার রুট আছে, আপনি route.name এর মাধ্যমে রুট নামটি পেতে পারেন। যদি আপনি কোনও নির্দিষ্ট URL এর জন্য রুট নামটি পেতে চান তবে বর্তমান অনুরোধ পথটি নয়, তাহলে আপনাকে রাক পাস করতে একটি জাল অনুরোধ বস্তুর মাকড়সা করতে হবে, অ্যাকশন কন্ট্রোলার :: রাউটিং :: রুটস। কিভাবে তারা এটা করছেন।



আপনি পরামিতি প্রয়োজন উচিত:

current_fullpath = request.env['ORIGINAL_FULLPATH']
# If you are browsing http://example.com/my/test/path?param_n=N 
# then current_fullpath will point to "/my/test/path?param_n=N"

এবং মনে রাখবেন আপনি সর্বদা উপলব্ধ বিকল্পগুলি দেখতে <%= debug request.env %> কল করতে পারেন।


আপনি রেকে মাধ্যমে সমস্ত রুট দেখতে পারেন: রুট (এটি আপনাকে সাহায্য করতে পারে)।


আমি আপনাকে URI মানে অনুমান করবো:

class BankController < ActionController::Base
  before_filter :pre_process 

  def index
    # do something
  end

  private
    def pre_process
      logger.debug("The URL" + request.url)
    end
end

নীচের আপনার মন্তব্য অনুসারে, যদি আপনার নিয়ামকটির নাম দরকার হয় তবে আপনি কেবল এটি করতে পারেন:

  private
    def pre_process
      self.controller_name        #  Will return "order"
      self.controller_class_name  # Will return "OrderController"
    end

তুমি এটি করতে পারো:

def active_action?(controller)
   'active' if controller.remove('/') == controller_name
end

এখন, আপনি এই ব্যবহার করতে পারেন:

<%= link_to users_path, class: "some-class #{active_action? users_path}" %>

সম্পূর্ণ অনুরোধকৃত ইউআরআই দেখতে আপনি request.env['REQUEST_URI'] করতে পারেন .. এটি নিম্নরূপ কিছু আউটপুট করবে

http://localhost:3000/client/1/users/1?name=test

request.url

request.path # বেস ইউআরএল ছাড়া পথ পেতে





routing