2012-10-17 64 views
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_stringargs哈希内置的方法。

我本来试图做的是像

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

但放在返回值,后来它被称为,回国找不到错误的方法。

我目前的做法有group不在范围之内relpath问题。我也试过用Proc.newlambda,但是由于它们不叫喜欢它扼流圈对他们以及正常功能。

我能做些什么来纠正呢?什么是正确的方法?

编辑

如果我做

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> 

EDIT 2

这里为t的更广泛的例子他编码。

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

':路径=>:relpath'?不应该是':path => relpath'? – oldergod

+0

@oldergod:看到我的编辑。 – sberry

+0

sub_menu类是什么?并且'item()'的API似乎是以错误的方式使用函数。 – oldergod

回答

1

我有一个问题导航库中没有经验,但在看文档在https://github.com/rpheath/navigation看来你是有望给一个名为路线助手作为路径参数的Rails的名称 - 不是实际的URL路径。 “未定义法”仅仅是生成,因为RPH ::导航试图调用由名称的辅助方法中定义:path参数,在这种情况下的Rails不能找到一个名为命名的路由helper方法“?myLink的myarg = 1” 。所以基本上,你需要做的是创建一个命名路由,并将其用作路径。