current_page 正在使用语言环境参数,但没有它们就无法工作

Lee*_*eol 4 ruby ruby-on-rails

我正在使用 将活动类分配给导航菜单current_page,但我认为我不明白是如何current_page工作的。

示例代码如下。

home_controller.rb

class HomeController < ApplicationController
  def index
  end

  def menu
  end
end
Run Code Online (Sandbox Code Playgroud)

应用程序.html.erb

<%= current_page?(controller: 'home', action: 'menu').to_s %>

<li><%= link_to(t('menu.title'), {controller: 'home', action: 'menu'}, class: current_page?(controller: 'home', action: 'menu')? 'active': '') %></li>
Run Code Online (Sandbox Code Playgroud)

当 in 时localhost:3000/menuapplication.html.erb打印 false。

当 in 时localhost:3000/menu?locale=enapplication.html.erb打印 true。

在 in 时localhost:3000/menu?locale=koapplication.html.erb也打印 true。

无论locale选项如何,我都希望它是“活跃的” 。根据APIDock,我所做的应该产生正确的结果,但它不像文档所说的那样工作。

# Let’s say we’re in the http://www.example.com/shop/checkout?order=desc action.

current_page?(action: 'process')
# => false

current_page?(controller: 'shop', action: 'checkout')
# => true

current_page?(controller: 'shop', action: 'checkout', order: 'asc')
# => false
Run Code Online (Sandbox Code Playgroud)

Lui*_*spo 5

我也遇到了这个问题。我更喜欢创建自己的current_action?helper(在application_helper.rb 内)直接检查动作,而不管像语言环境或任何其他的 url 参数。

这是我创建的助手。很简单:

def current_action?(controller: 'default', action: 'default')
    (controller == params[:controller]) and (action == params[:action])
end
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。