1

免责声明我对 Ruby / Rails 很陌生

我正在使用RPH::Navigation创建我的导航菜单。我现在要做的是添加一些子导航项目,我这样做是这样的:

  suboptions.each do |group|
    def relpath
      link(group[:link], group[:args]).
    end 
    sub_menu.item group[:name], :path => :relpath
  end    

link只是一个方法,它返回"#{link}?#{query_string}"从哈希query_string构建的位置。args

我最初想做的是

    sub_menu.item group[:name], :path => link(group[:link], group[:args])

但是将返回值放入,然后调用它,返回方法未找到错误。

我目前的方法存在的问题group不在relpath. 我也尝试过使用Proc.newand lambda,但由于它们不像普通函数那样被调用,它也会阻塞它们。

我能做些什么来纠正这个问题?什么是正确的方法?

编辑

如果我做

suboptions.each do |group|
  def relpath(group)
    link(group[:link], group[:args]).
  end 
  sub_menu.item group[:name], :path => relpath(group)
end 

然后我得到的错误是:

undefined method `mylink?myarg=1' for #<#<Class:0x007fd8068acd58>:0x007fd8068b07f0>

编辑 2

这是更广泛的代码示例。

menu.item MyTestsController, :text => 'Test', :if => Proc.new { |view| view.can? :read, MyTest } do |sub_menu|
  suboptions = [{:link => "tests", :name => "All Systems", :args => {:system_id => 0}},
                {:link => "tests", :name => "System A", :args => {:system_id => 1}}]
  suboptions.each do |group|
    def relpath(group)
      link(group[:link], group[:args]).
    end 
    sub_menu.item group[:name], :path => relpath(group)
  end 
end 
4

1 回答 1

1

我没有使用相关导航库的经验,但是查看https://github.com/rpheath/navigation上的文档,您似乎应该将 Rails 命名路由助手的名称作为路径参数 - 而不是实际的 URL 路由。“未定义方法”的生成只是因为 RPH::Navigation 尝试通过 :path 参数中定义的名称调用辅助方法,在这种情况下,Rails 找不到名为“mylink?myarg=1”的命名路由辅助方法. 所以基本上,您需要做的是创建一个命名路由,并将其用作路径。

于 2012-10-17T07:48:17.153 回答