0

ブロック ヘルパーを作成しようとしていますが、current_page にアクセスする方法がわかりません。クラスの中から。

私のヘルパーファイルは次のようになります。

class NavList

    include ActionView::Helpers::TagHelper
    include ActionView::Helpers::UrlHelper

    def header(title)
        content_tag :li, title, class: 'nav-header'
    end

    def link(title, path, opts={})

        content_tag :li, link_to(title, path), class: opts[:class]
    end

end

    def nav_list(&block)
    new_block = Proc.new do
        helper = NavList.new
        block.call(helper)
    end
    content_tag :ul, capture(&new_block), class: 'nav nav-list'
end

そして、私はヘルパーを使用することができます

<%= nav_list do |nl| %>
    <%= nl.header 'Location' %>
    <%= nl.link 'Basic Information', url_for(@department), class: current_page?(@departments) ? 'active' : '' %>
    <%= nl.link 'Employees', department_users_path(@department) %>
<% end %>

しかし、私がやりたいのは、そのアクティブなクラスを常に引き受ける必要がないことです。だから私はこのようなことをしたいと思います

 def link(title, path, opts={})
    css_class = 'inactive'
    css_class = 'active' if current_page?(path)
content_tag :li, link_to(title, path), class: opts[:class]
 end

しかし、current_page を使用する方法が見つかりませんか? NavList クラス内から。見つからないリクエストメソッドについて説明します

4

2 に答える 2

0

もっと良い方法があるかどうかはわかりませんが

class NavList
attr_accessor :request
    include ActionView::Helpers::TagHelper
    include ActionView::Helpers::UrlHelper

    def header(title)
        content_tag :li, title, class: 'nav-header'
    end

    def link(title, path, opts={class: ''})
      opts[:class] = "#{opts[:class]} active" if current_page?(path)
        content_tag :li, link_to(title, path), class: opts[:class]
    end

end


def nav_list(&block)
    new_block = Proc.new do
        helper = NavList.new
        helper.request = request
        block.call(helper)
    end
    content_tag :ul, capture(&new_block), class: 'nav nav-list'
end
于 2013-09-19T23:20:04.727 に答える