রেল 3 এ নেভিতে "বর্তমান" শ্রেণি যুক্ত করার সর্বোত্তম উপায়


111

আমার একটি নেভিগেশন মেনুতে কিছু স্থির পৃষ্ঠা রয়েছে। আমি বর্তমানে প্রদর্শিত আইটেমটিতে "কারেন্ট" এর মতো একটি শ্রেণি যুক্ত করতে চাই।

আমি যেভাবে এটি করছি তা হ'ল নিয়ামক এবং ক্রিয়াটি পরীক্ষা করার জন্য প্রচুর হেল্পার পদ্ধতি (এক আইটেমের জন্য প্রতিটি) যুক্ত করা।

def current_root_class
  'class="current"' if controller_name == "homepage" && action_name == "index" 
end

<ul>
  <li <%= current_root_class %>><%= link_to "Home", root_path %>

এটা করার আর কোন ভাল উপায় আছে !? আমার বর্তমান উপায় এত বোকা ......

উত্তর:


56

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

অ্যাপ্লিকেশন_হেল্পার.আরবিতে

  def controller?(*controller)
    controller.include?(params[:controller])
  end

  def action?(*action)
    action.include?(params[:action])
  end

তারপরে আপনি if controller?("homepage") && action?("index", "show")আপনার দর্শন বা অন্যান্য সহায়ক পদ্ধতিতে ব্যবহার করতে পারেন ...


আপনার নিয়ম অনুসারে যখন কয়েকটি পৃষ্ঠা বিভিন্ন কন্ট্রোলার / ক্রিয়া দ্বারা পরিচালিত হয় তবে একই মেনু আইটেমে থাকে, ঠিক তাই না? আপনি আরও সুবিধার সম্মুখীন হয়েছে ~?
পিটারওয়ং

সিনট্যাক্সের সংক্ষিপ্ততা ছাড়া আর কোনও সুবিধা নেই। অন্য কারওর থেকে ভাল সমাধান আছে কিনা তা দেখার জন্য আমি আগ্রহী।
ইয়ান্নিস

আমি দুর্দান্ত সাফল্য দিয়ে এই পদ্ধতিটি করেছি। এই কোডটি এই দর্শনটিতে যুক্ত করা হয়েছে: <% = লিঙ্ক_ থেকে "ব্যবহারকারী", ব্যবহারকারী_পথ, শ্রেণি: (নিয়ন্ত্রণকারী? ("ব্যবহারকারী")? 'নির্বাচিত': নীল)%> সত্যিই ঝরঝরে যে এটি / ব্যবহারকারী এবং / ব্যবহারকারী / নতুন উভয়ের জন্যই কাজ করে ।
আন্দ্রেস

1
উন্নতি হতে পারে controller_nameএবং action_nameসম্ভবত প্যারামের পরিবর্তে
ফ্রান্সেস্কো বেলাদোনা

সাবাশ. আমি এই সরল রাখার কথা ভাবি নি তবে এই আঁকাগুলি খুব সুন্দর করে রেখেছি। +1
newdark-it

290

আমি একটি সহায়ক বলা হয়েছিল nav_link:

def nav_link(link_text, link_path)
  class_name = current_page?(link_path) ? 'current' : ''

  content_tag(:li, :class => class_name) do
    link_to link_text, link_path
  end
end

ব্যবহৃত:

nav_link 'Home', root_path

যা এইচটিএমএলের মতো উত্পাদন করবে

<li class="current"><a href="/">Home</a></li>

3
এই টুইটার ootstrap সাথে সুন্দরভাবে কাজ করে যদি আপনি টুইটার বুটস্ট্র্যাপ NavBar ব্যবহার করছেন twitter.github.com/bootstrap/examples/hero.html
লি McAlilly

41
ক্লাস_নেম = কারেন্ট_পেজ? (লিঙ্ক_পথ) এ পরিবর্তন করবেন? 'কারেন্ট': আপনি যদি না চান তবে ক্লাস ট্যাগটি যখন বর্তমান পৃষ্ঠায় নেই তখন প্রদর্শন করা উচিত
ম্যাথু হুই

1
ড্রপডাউনগুলিতে ব্যবহৃত নেস্টেড তালিকার জন্য আপনি কীভাবে এটি সংশোধন করবেন?
doremi

9
মরুভূমি হিসাবে DRY
অরল্যান্ডো

1
আমি অতিরিক্ত কিছু ক্লাস যুক্ত করেছি_ অতিরিক্ত ক্লাস = শূন্য, আইডি = শূন্য তারপর কন্টেন্ট_ট্যাগ সামগ্রী_ট্যাগের ভিতরে (: লি, শ্রেণি: [শ্রেণি_নাম, অতিরিক্ত_ক্ল্যাশস], আইডি: আইডি) যাতে আপনি নিজের ক্লাস এবং আইডি এর উপাদানগুলিতেও যুক্ত করতে পারেন :)
জন

72

আপনার ক্লাসটি current_page?বরাদ্দ করা উচিত কিনা তা নির্ধারণ করতে সহায়কটি ব্যবহার করুন "current"। উদাহরণ স্বরূপ:

<%= 'active' if current_page?(home_about_path) %>

উল্লেখ্য এছাড়াও আপনি একটি পথ (না শুধুমাত্র অপশনের একটি হ্যাশ), যেমন প্রেরণ করতে পারেন: current_page?(root_path)


3
ক্যোয়ারী প্যারামগুলি উপেক্ষা করার কোনও উপায় কী আছে?
মোহামাদ

@ মোহমাদ, আপনি এটি করতে পারেন: কারেন্ট_পেজ? (নিয়ন্ত্রক: 'ব্যবহারকারী', ক্রিয়া: 'সূচক')
নীলিদ

26

কাজটি করার জন্য আমি এই__লিঙ্ক (পাঠ্য, লিঙ্ক) ফাংশনটি অ্যাপ্লিকেশন_হেল্পার.আরবিতে (রেল 3) ব্যবহার করি এবং এটি আমার জন্য আমার বুটস্ট্র্যাপ টুইটার 2.0 এনএভি বার লিঙ্কগুলি রোল করে।

def nav_link(text, link)
    recognized = Rails.application.routes.recognize_path(link)
    if recognized[:controller] == params[:controller] && recognized[:action] == params[:action]
        content_tag(:li, :class => "active") do
            link_to( text, link)
        end
    else
        content_tag(:li) do
            link_to( text, link)
        end
    end
end

উদাহরণ:

<%=nav_link("About Us", about_path) %>

current_page?অন্যান্য উত্তরগুলির মতো পদ্ধতিটি ব্যবহার করে এটি সরল করা যেতে পারে ।
তিমু লেইস্তি

10

আমি যেভাবে এটি করেছি তা হ'ল অ্যাপ্লিকেশন_হেল্পারে একটি সহায়ক ফাংশন যুক্ত করা

def current_class?(test_path)
  return 'current' if request.request_uri == test_path
  ''
end

তারপরে এনএভিতে,

<%= link_to 'Home', root_path, :class => current_class?(root_path) %>

এটি বর্তমান পৃষ্ঠার uri এর বিপরীতে লিঙ্ক পাথটি পরীক্ষা করে এবং আপনার বর্তমান বর্গ বা খালি স্ট্রিং দেয় returns

আমি এটিকে পুরোপুরি পরীক্ষা করে দেখিনি এবং আমি আরআর-এর কাছে খুব নতুন (পিএইচপি দিয়ে এক দশক পরে চলছি) তাই যদি এর কোনও বড় ত্রুটি থাকে তবে আমি এটি শুনতে পছন্দ করব।

কমপক্ষে এই পথে আপনার কেবলমাত্র 1 জন সহায়ক ফাংশন এবং প্রতিটি লিঙ্কে একটি সাধারণ কল প্রয়োজন।


1
শুধু একটি সমস্যা। আমি অনুরোধ_র পরিবর্তে অনুরোধ.পথ ব্যবহার করেছি (অনুরোধ_উরি কাজ করছে না, রেলের সংস্করণে সমস্যা আছে?) আপনার উত্তরটি আমার মতে পরিষ্কার এবং মার্জিত।
টনি

6

@ সিলড্রিকের উত্তরটি তৈরি করতে ...

আপনি যদি এই কোডটি প্রয়োগ.জেজে যোগ করেন তবে এটি নিশ্চিত করবে যে সক্রিয় বাচ্চাদের সাথে যে কোনও ড্রপডাউন মেনুও সক্রিয় হিসাবে চিহ্নিত হবে ...

$('.active').closest('li.dropdown').addClass('active');

সহায়ক কোডটি পুনরুদ্ধার করতে> নাভি_লিঙ্ক নামে একটি সহায়ক যুক্ত করুন:

def nav_link_to(link_text, link_path)
  class_name = current_page?(link_path) ? 'active' : ''

  content_tag(:li, :class => class_name) do
    link_to link_text, link_path
  end
end

ব্যবহৃত:

nav_link_to 'Home', root_path

যা এইচটিএমএলের মতো উত্পাদন করবে

<li class="active"><a href="/">Home</a></li>

4

আমি মনে করি সবচেয়ে ভাল উপায়

application_helper.rb:

def is_active(controller, action)       
  params[:action] == action && params[:controller] == controller ? "active" : nil        
end

এবং মেনুতে:

<li class="<%= is_active('controller', 'action') %>">

"" এর মতো ফাঁকা ক্লাস ছেড়ে দেওয়া কি ঠিক আছে?
হর্ষ এমভি

হ্যাঁ. আপনি উত্সটি খালি শ্রেণির বৈশিষ্ট্যগুলির একটি গোছা দেখলে এটি আশ্চর্যজনক হতে পারে তবে এটি বৈধ এইচটিএমএল।
কোবল্টজ

আপনি ব্যবহার করতে পারেন <%= content_tag(:li, "Click me", class: is_active('controller', 'action')) %>, এটি শূন্যের জন্য কোনও শ্রেণি বৈশিষ্ট্য মুদ্রণ করবে না। apidock.com/rails/ActionView/ সহায়তা
টাগহেল্পার /

4

আমি জানি এটি একটি সেকেলে উত্তর, তবে আপনি সহজেই এই সমস্ত বর্তমান পৃষ্ঠার চেকটিকে একটি লিঙ্ক_ টু সহায়ক র‌্যাপার ব্যবহার করে অ্যাক্টিভ_লিংক_তে রত্ন বলে সহজেই অগ্রাহ্য করতে পারেন , এটি আপনি যা চান ঠিক তেমন কাজ করে, বর্তমান পৃষ্ঠার লিঙ্কটিতে একটি সক্রিয় শ্রেণি যুক্ত করুন


4

রেল ভিউতে বুটস্ট্র্যাপ মেনু পৃষ্ঠাতে কীভাবে সক্রিয় শ্রেণি যুক্ত করা যায় তার পুরো উদাহরণটি এখানে।

    <li class="<%= 'active' if current_page?(root_path) %>"><%= link_to 'Home', controller: "welcome" %></li>
    <li class="<%= 'active' if current_page?(about_path) %>"><%= link_to 'About us', about_path %></li>
   <li class="<%= 'active' if current_page?(contact_path) %>"><%= link_to 'Contact us', contact_path %></li>

3

আমি রেলগুলিতে ট্যাবস নামে একটি দুর্দান্ত রত্ন ব্যবহার করি ।


1
পরামর্শের জন্য ধন্যবাদ. যেহেতু আমার নাভ এত সহজ এবং সামান্য আইটেম সহ কেবল একটিই তাই মণিটি সম্ভবত খুব বেশি চালিত।
পিটারওয়ং

3

আমার কাছে Nav_link এর আরও একটি সংক্ষিপ্ত সংস্করণ রয়েছে যা লিংক_ টোর মতোই কাজ করে তবে একটি মোড়ানো লি ট্যাগ আউটপুটে কাস্টমাইজ করা হয়েছে।

আপনার অ্যাপ্লিকেশন_হেল্পার.আরবিতে নিম্নলিখিতগুলি রাখুন

def nav_link(*args, &block)
    if block_given?
      options      = args.first || {}
      html_options = args.second
      nav_link(capture(&block), options, html_options)
    else
      name         = args[0]
      options      = args[1] || {}
      html_options = args[2]

      html_options = convert_options_to_data_attributes(options, html_options)
      url = url_for(options)

      class_name = current_page?(url) ? 'active' : nil

      href = html_options['href']
      tag_options = tag_options(html_options)

      href_attr = "href=\"#{ERB::Util.html_escape(url)}\"" unless href
      "<li class=\"#{class_name}\"><a #{href_attr}#{tag_options}>#{ERB::Util.html_escape(name || url)}</a></li>".html_safe
    end
  end

আপনি যদি উপরের কোডটি দেখেন এবং এটি url_helper.rb এর লিঙ্ক_টো কোডের সাথে তুলনা করেন তবে পার্থক্য কেবলমাত্র এটি ইউআরএল বর্তমান পৃষ্ঠা কিনা তা পরীক্ষা করে এবং একটি মোড়ক লি ট্যাগটিতে "সক্রিয়" শ্রেণি যুক্ত করে। এর কারণ আমি টুইটার বুটস্ট্র্যাপ এর nav_link সাহায্যকারী ব্যবহার করছি এনএভি উপাদান যা লি ট্যাগ এবং "সক্রিয়" বর্গ বাইরের লি প্রয়োগ ভিতরে আবৃত করা লিঙ্কগুলি পছন্দ করে।

উপরের কোডটি সম্পর্কে দুর্দান্ত জিনিসটি হ'ল লিঙ্ক_ টু দিয়ে আপনি যেমন করতে পারেন ঠিক তেমনভাবে এটি আপনাকে একটি ব্লকে ফাংশনে প্রবেশ করতে দেয়।

উদাহরণস্বরূপ, আইকন সহ বুটস্ট্র্যাপ ন্যাভ তালিকাটি দেখতে পাবেন:

স্লিম:

ul.nav.nav-list
  =nav_link root_path do
    i.icon-home
    |  Home
  =nav_link "#" do
    i.icon-user
    |  Users

আউটপুট:

<ul class="nav nav-list">
  <li class="active">
    <a href="/">
      <i class="icon-home"/>
      Home
    </a>
  </li>
  <li>
    <a href="#">
      <i class="icon-users"/>
      Users
    </a>
  </li>
</ul>

এছাড়াও, ঠিক লিঙ্ক_-তে সহায়ক হিসাবে, আপনি এইচটিএমএল বিকল্পগুলিতে নাভ_ লিঙ্কে যেতে পারেন, যা একটি ট্যাগে প্রয়োগ করা হবে।

অ্যাঙ্কারের জন্য একটি শিরোনাম পাস করার একটি উদাহরণ:

স্লিম:

ul.nav.nav-list
  =nav_link root_path, title:"Home" do
    i.icon-home
    |  Home
  =nav_link "#", title:"Users" do
    i.icon-user
    |  Users

আউটপুট:

<ul class="nav nav-list">
  <li class="active">
    <a href="/" title="Home">
      <i class="icon-home"/>
      Home
    </a>
  </li>
  <li>
    <a href="#" title="Users">
      <i class="icon-users"/>
      Users
    </a>
  </li>
</ul>

অসাধারণ. আমার জন্য এটি সবচেয়ে কার্যকর বিকল্প ছিল ঠিক কারণ এটি ব্লকগুলিকে অনুমতি দেয়। অসংখ্য ধন্যবাদ!
কাস্পেরি

3

ব্যক্তিগতভাবে আমার জন্য আমি এখানে উত্তরগুলির সংমিশ্রণটি ব্যবহার করেছি

<li class="<%= 'active' if current_page?(inventory_index_path) %>"><a href="#">Menu</a></li>

আমি মেটেরালাইজ সিএসএস ব্যবহার করছি এবং আমার প্রধান বিভাগগুলিকে সঙ্কুচিত করে তোলার উপায় আমার নীচের কোডটি ব্যবহার করে

$('.active').closest(".collapsible.collapsible-accordion")
            .find(".collapsible-header")
            .click();

আশা করি এটি কাউকে সাহায্য করবে


এই সম্পর্কে ভুলে গেছি। এটি একটি অনুস্মারক হিসাবে পোস্ট করার জন্য ধন্যবাদ।
newdark-it

2

current_page?পদ্ধতি, যাতে আমি অন্য উত্তর উপর ভিত্তি করে এই করেছি আমার জন্য নমনীয় যথেষ্ট (আপনি, একটি নিয়ামক কিন্তু একটি কর্ম সেট করুন, তারপর এটি শুধুমাত্র নিয়ামক এর সূচীতে কর্মের উপর সত্য ফিরে আসবেন বলে) নয়:

  def nav_link_to(link_text, link_path, checks=nil)
    active = false
    if not checks.nil?
      active = true
      checks.each do |check,v|
        if not v.include? params[check]
          active = false
          break
        end
      end
    end

    return content_tag :li, :class => (active ? 'active' : '') do
      link_to link_text, link_path
    end
  end

উদাহরণ:

nav_link_to "Pages", pages_url, :controller => 'pages'

আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ। আমি মনে করি আপনার আসলে গৃহীত উত্তরের সাথে মিল রয়েছে :)
পিটারওয়ং

আমি গুগলের মাধ্যমে এই উত্তরটি পেলাম যেহেতু আমার এই সমস্যা হচ্ছে, তাই আমি ভেবেছিলাম যে আমি যারা এই সমস্যার
মুখোমুখি হয়েছি তাদের সবাইকেও সহায়তা করব

2

হাঁ! এই নিবন্ধটি দেখুন: রেলের লিঙ্কগুলিতে একটি 'নির্বাচিত' ক্লাস যুক্ত করার একটি উত্তম উপায়

অ্যাপ্লিকেশন / সহায়তাকারীদের মধ্যে nav_link_helper.rb ফেলে দিন এবং এটি এতটা সহজ হতে পারে:

<%= nav_link 'My_Page', 'http://example.com/page' %>

নাভ_ লিঙ্ক সহায়ক সাহায্যকারী যেমন স্ট্যান্ডার্ড রেলগুলি লিঙ্ক_তে সহায়তা করে তবে নির্দিষ্ট মানদণ্ড পূরণ হলে আপনার লিঙ্কে (বা এর মোড়ক) একটি 'নির্বাচিত' শ্রেণি যুক্ত করুন। ডিফল্টরূপে, যদি লিঙ্কটির গন্তব্য url বর্তমান পৃষ্ঠার url এর একই url হয়, তবে 'নির্বাচিত' এর একটি ডিফল্ট শ্রেণি লিঙ্কটিতে যুক্ত করা হবে।

এখানে একটি বক্তব্য রয়েছে: https://gist.github.com/3279194

আপডেট: এটি এখন মণি: http://rubygems.org/gems/nav_link_to


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

2

আমি শীর্ষ স্তরের লিঙ্কগুলির জন্য এর মতো সরল সহায়ক ব্যবহার করি যাতে /stories/my-storyপৃষ্ঠাটি /storiesলিঙ্কটি হাইলাইট করে

def nav_link text, url

  active = (url == request.fullpath || (url != '/' && request.fullpath[0..(url.size-1)] == url))

  "<li#{ active ? " class='selected'" : '' }><a href='#{url}'>#{text}</a></li>".html_safe

end

2

আমাকে আমার সমাধানটি দেখান:

_হেডার। html.erb :

  <ul class="nav">
    <%= nav_tabs(@tabs) %> 
  </ul>

application_helper.rb :

 def nav_tabs(tabs=[])
    html = []
    tabs.each do |tab| 
      html << (content_tag :li, :class => ("current-page" if request.fullpath.split(/[\??]/)[0] == tab[:path]) do
        link_to tab[:path] do
          content_tag(:i, '', :class => tab[:icon]) +
          tag(:br) +
          "#{tab[:name]}"
        end
      end)        
    end

    html.join.html_safe
  end

প্রয়োগ_কন্ট্রোলআরআরবি :

before_filter :set_navigation_tabs

private
def set_navigation_tabs
  @tabs = 
    if current_user && manager?
      [
        { :name => "Home", :icon => "icon-home", :path => home_index_path },
        { :name => "Portfolio", :icon => "icon-camera", :path => portfolio_home_index_path },
        { :name => "Contact", :icon => "icon-envelope-alt", :path => contact_home_index_path }
      ]
    elsif current_user && client?
      ...
    end

1

স্কিলড্রিকের উত্তর অনুসারে , আমি এটিকে নিম্নলিখিতটিতে পরিবর্তন করব:

def nav_link(*args, &block)
  is_active = current_page?(args[0]) || current_page?(args[1])
  class_name = is_active ? 'active' : nil

  content_tag(:li, class: class_name) do
    link_to *args, &block
  end
end

এটি আরও দরকারী করতে।


1

এই সংস্করণটি @ স্কিলড্রিকের একটিতে ভিত্তিক তবে আপনাকে এইচটিএমএল সামগ্রী যুক্ত করতে দেয়।

সুতরাং, আপনি এটি করতে পারেন:

nav_link "A Page", a_page_path

তবে এছাড়াও:

nav_link a_page_path do
  <strong>A Page</strong>
end

বা অন্য কোনও এইচটিএমএল সামগ্রী (উদাহরণ হিসাবে আপনি একটি আইকন যোগ করতে পারেন)।

এখানে সাহায্যকারীটি হলেন:

  def nav_link(name = nil, options = nil, html_options = nil, &block)
    html_options, options, name = options, name, block if block_given?
    options ||= {}

    html_options = convert_options_to_data_attributes(options, html_options)

    url = url_for(options)
    html_options['href'] ||= url

    class_name = current_page?(url) ? 'current' : ''
    content_tag(:li, :class => class_name) do  
      content_tag(:a, name || url, html_options, &block)
    end
  end

1

আমি মনে করি আমি একটি সহজ সমাধান নিয়ে এসেছি যা ব্যবহারের ক্ষেত্রে প্রচুর ক্ষেত্রে সহায়ক হতে পারে। এটি আমাকে দেয়:

  • কেবল সাধারণ পাঠ্যই নয় অভ্যন্তরে এইচটিএমএল সমর্থন করে link_to করুন (উদাহরণস্বরূপ লিঙ্কটির ভিতরে একটি আইকন যুক্ত করুন)
  • এতে কোডের কয়েকটি লাইন যুক্ত করুন application_helper.rb
  • পরিশেষে activeপরিবর্তে এটি একমাত্র শ্রেণী হচ্ছে লিংক উপাদান পুরো ক্লাসের নাম।

সুতরাং, এটিকে যুক্ত করুন application_helper.rb:

def active_class?(class_name = nil, path)
  class_name ||= ""
  class_name += " active" if current_page?(path)
  class_name.strip!
  return class_name
end

এবং আপনার টেমপ্লেটে আপনার এমন কিছু থাকতে পারে:

<div class="col-xs-3">
  <%= link_to root_path, :class => active_class?("btn btn-outline-primary", root_path) do %>
    <i class="fa fa-list-alt fa-fw"></i>
  <% end %>
</div>

বোনাস হিসাবে আপনি নির্দিষ্ট বা না করতে পারেন class_nameএবং এটি এটি ব্যবহার করতে পারেন:<div class="<%= current_page?(root_path) %>">

পূর্ববর্তী উত্তর 1 , 2 এবং সংস্থানগুলি ধন্যবাদ ।


0

এই সবগুলি সহজ এনএভি বারগুলির সাথে কাজ করে তবে সাব-মেনু ড্রপ ডাউন সম্পর্কে কী? যখন একটি উপ-মেনু নির্বাচন করা হয় শীর্ষ মেনু আইটেমটি এই ক্ষেত্রে 'বর্তমান' করা উচিত ট্যাবস_আন_আপনি আমাকে সমাধান হিসাবে সমাধান করবেন


0

এইভাবে আমি আমার বর্তমান প্রকল্পে সমাধান করেছি।

def class_if_current_page(current_page = {}, *my_class)
    if current_page?(current_page)
      my_class.each do |klass|
        "#{klass} "
      end
    end
  end

তারপর ..

li = link_to company_path 
    class: %w{ class_if_current_page( { status: "pending" }, "active" ), "company" } do  
      Current Company

0

আমার সহজ উপায় -

application.html.erb,

<div class="navbar">
    <div class="<%= @menu1_current %> first-item"><a href="/menu1"> MENU1 </a></div>
    <div class="<%= @menu2_current %>"><a href="/menu2"> MENU2 </a></div>
    <div class="<%= @menu3_current %>"><a href="/menu3"> MENU3 </a></div>
    <div class="<%= @menu4_current %> last-item"><a href="/menu4"> MENU4 </a></div>
</div>

main_controller.erb,

class MainController < ApplicationController
    def menu1
        @menu1_current = "current"
    end

    def menu2
        @menu2_current = "current"
    end

    def menu3
        @menu3_current = "current"
    end

    def menu4
        @menu4_current = "current"
    end
end

ধন্যবাদ।


0

এছাড়াও আপনি ভিউতে এইচটিএমএল অপশন হ্যাশ সমর্থন করতে চান। উদাহরণস্বরূপ, আপনি যদি অন্য সিএসএস ক্লাস বা আইডি দিয়ে কল করতে চান তবে আপনি এইভাবে সহায়ক ফাংশনটি সংজ্ঞায়িত করতে পারেন।

def nav_link_to(text, url, options = {})
  options[:class] ||= ""
  options[:class] += " active"
  options[:class].strip!
  link_to text, url, options
end

সুতরাং ভিউতে, এই সহায়কটিকে কল করুন ঠিক একইভাবে আপনি লিংক_তে সহায়তা কল করবেন

<%= nav_link_to "About", about_path, class: "my-css-class" %>

0

ApplicationHelperনীচে হিসাবে একটি পদ্ধতি তৈরি করুন ।

def active controllers, action_names = nil
  class_name = controllers.split(",").any? { |c| controller.controller_name == c.strip } ? "active" : ""
  if class_name.present? && action_names.present?
    return action_names.split(",").any? { |an| controller.action_name == an.strip } ? "active" : ""
  end
  class_name
end

এখন নীচের ব্যবহারের ক্ষেত্রে দেখুন হিসাবে এটি ব্যবহার করুন।

1. কোনও নির্দিষ্ট নিয়ামকের সমস্ত ক্রিয়াকলাপের জন্য

<li class="<%= active('controller_name')%>">
....
</li>

২. অনেক কন্ট্রোলারের সমস্ত ক্রিয়াকলাপের জন্য (কমা বিচ্ছিন্ন সহ)

<li class="<%= active('controller_name1,controller_name2')%>">
....
</li>

৩. যে কোনও নির্দিষ্ট নিয়ামকের নির্দিষ্ট কর্মের জন্য action

<li class="<%= active('controller_name', 'action_name')%>">
....
</li>

৪. অনেক কন্ট্রোলারের নির্দিষ্ট কর্মের জন্য (কমা বিচ্ছিন্ন সহ)

<li class="<%= active('controller_name1,controller_name2', 'action_name')%>">
....
</li>

5. যে কোনও নির্দিষ্ট নিয়ামকের কিছু নির্দিষ্ট ক্রিয়াকলাপের জন্য

<li class="<%= active('controller_name', 'index, show')%>">
....
</li>

Many . অনেক নিয়ামকের কিছু নির্দিষ্ট ক্রিয়াকলাপের জন্য (কমা বিচ্ছিন্ন সহ)

<li class="<%= active('controller_name1,controller_name2', 'index, show')%>">
....
</li>

আশা করি এটা সাহায্য করবে

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