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

时间:2015-01-20 04:19:16

标签: ruby-on-rails ruby

我使用current_page将活动课程分配到导航菜单,但我不认为我理解current_page的工作方式。

示例代码如下。

home_controller.rb

class HomeController < ApplicationController
  def index
  end

  def menu
  end
end

application.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>

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

3 个答案:

答案 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创建了一个选项。

application.html.erb

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

错误

# No route matches {:action=>"nothing", :controller=>"home", :locale=>:en}

所以现在,我认为最好尝试像current_page?('/menu')这样的东西来支持各种语言环境选项。因为它只是起作用。