免责声明我是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.new
和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
答案 0 :(得分:1)
我没有使用相关导航库的经验,但查看https://github.com/rpheath/navigation处的文档,似乎您应该将名为路径助手的Rails名称作为路径参数 - 而不是实际的URL路由。简单地生成“未定义的方法”,因为RPH :: Navigation尝试通过:path参数中定义的名称调用辅助方法,在这种情况下,Rails无法找到名为“mylink?myarg = 1”的命名路由帮助方法。所以基本上,你需要做的是创建一个命名路由,并将其用作路径。