Lee*_*eol 4 ruby ruby-on-rails
我正在使用 将活动类分配给导航菜单current_page,但我认为我不明白是如何current_page工作的。
示例代码如下。
class HomeController < ApplicationController
def index
end
def menu
end
end
Run Code Online (Sandbox Code Playgroud)
<%= 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/menu,application.html.erb打印 false。
当 in 时localhost:3000/menu?locale=en,application.html.erb打印 true。
在 in 时localhost:3000/menu?locale=ko,application.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)
我也遇到了这个问题。我更喜欢创建自己的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)
希望这可以帮助。