2

作業中のアプリケーションの現在のパスにあるルート セグメント キーの数を特定する必要があります。関連する Rails 3 ソース ファイルを少し調べても、わかりません。

現在のルートからパスを使用url_forして構築する方法は知っていますが、実際にルートへのマップが使用されているrequestに到達する方法はわかりません。必要なルートのインスタンスを取得できれば、Route#segment_keys を呼び出すだけで、必要なものを取得できます。ActionController::Routing::Routeurl_for

誰かが興味を持っている場合、私がこれを行っている理由は、選択ドロップダウンでリソースを切り替えて、現在選択されているリソースに適用される現在のビューにとどまることができるようにするためですが、現在のパスにネストされたパスが含まれていない場合に限ります(つまり、番号 1 は 2 の子ではないため、トグルしますが、トグル間ではトグル/resources/1/editません)。/resources/2/edit/resources/1/subresources/1/resources/2/subresources/1subresourceresource

4

3 に答える 3

0

このようなものは役に立ちますか?ルート ハッシュへのパスを解決します。

> uri = URI("http://localhost:3000/items/2015/3") # some URI for your request, or the URL/Path in question
> Rails.application.routes.recognize_path(uri.path)
=> {:controller=>"items", :action=>"index", :year=>"2015", :month=>"03"}
于 2015-04-06T15:37:14.940 に答える
0

このようなことをする必要がある場合があったので、application_helper.rb にメソッドを追加しました。

def display_sub_navigation
  if admin_signed_in?
    url_path = request.fullpath.split("/")
    if url_path.size > 3 && File.exists?( Rails.root.join("app/views/shared/_#{url_path[2]}_sub_navigation.html.erb") )
      render :partial => "/shared/#{url_path[2]}_sub_navigation"
    end
  end
end

ご覧のとおり、request.fullpath.split("/") を使用すると、url_path に割り当てる配列が作成されます。ここから、必要なものを抽出したり、配列内の要素の数を数えたりできます。これがあなたを正しい方向に押し進めることを願っています。

于 2011-12-14T22:39:32.953 に答える
0

すべてのセグメント キーが必要ですか、それとも特定の種類のキーだけが必要ですか?

このコードでリテラルキーだけを取得できました

Rails.application.routes.routes.collect do |i|
  i.path.spec.grep(Journey::Nodes::Literal).collect(&:left)
end

これでリテラルセグメントの配列だけが得られました-存在するセグメントキーの数をカウントするように変更できるに違いありません(または、リテラルに対して1回、シンボルに対して1回実行します)Journey::Nodes::Catサポートto_sにより、構築に使用される元の文字列が得られますルートと、to_regexp実行できる正規表現を提供するルートrequest.path

于 2012-10-08T19:31:09.657 に答える