我使用current_page
将活动课程分配到导航菜单,但我不认为我理解current_page
的工作方式。
示例代码如下。
class HomeController < ApplicationController
def index
end
def menu
end
end
<%= 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>
在localhost:3000/menu
时,application.html.erb
打印为false。
在localhost:3000/menu?locale=en
时,application.html.erb
打印为真。
在localhost:3000/menu?locale=ko
时,application.html.erb
也会输出true。
我希望它成为&#34;活跃的&#34;无论locale
选项如何。根据{{3}},我所做的应该会产生正确的结果,但它并没有像文档所说的那样起作用。
# 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
答案 0 :(得分:4)
我也遇到过这个问题。我更喜欢创建自己的 current_action?帮助程序(在 application_helper.rb 中)以直接检查操作,而不管像 locale 这样的url params或任何其他。
这是我创建的助手。很简单:
def current_action?(controller: 'default', action: 'default')
(controller == params[:controller]) and (action == params[:action])
end
希望这有帮助。
答案 1 :(得分:0)
rails api引用表示current_page?(options)返回&#34;如果当前请求URI是由给定选项生成的,则为True。#`;。
localhost:3000/menu?locale=en
包含locale
,它被视为用于生成当前请求uri的选项。我认为current_page?(controller: 'home', action: 'menu', locale: 'en')
返回true。
答案 2 :(得分:0)
当我针对不存在的方法尝试current_page
时,我发现current_page
自动为locale
创建了一个选项。
<%= current_page?(controller: 'home', action: 'nothing').to_s %>
# No route matches {:action=>"nothing", :controller=>"home", :locale=>:en}
所以现在,我认为最好尝试像current_page?('/menu')
这样的东西来支持各种语言环境选项。因为它只是起作用。