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、範囲内にない問題がありますrelpathProc.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 に答える