2011-11-09 16 views
1

URLのためのRails 3.1.1とFriendly_idの使用。パスのないネストされたルートでの編集

これはかなり簡単だと思いますが、わかりません。無印(#)の行は、私が把握しようとしています一つです

resources :pages, :path => '' do 
    # WHAT_DO_I_TYPE_HERE 
    resources :products, :except => [:index], :path => '' do 
     member do 
      post 'broken_link' 
     end 
    end  
    end 

私はこのようになり、ネストされたルートを持っています。基本的に私は次のようなURLを持っています:

domain.com/page_name/product_name/(friendly_idを通じて) domain.com/music/mp3/

url domain.com/music/editを使用して音楽に関するページを編集します。

ここで、次のように入力します。 a。 <blank>#何も...空白のままにしておいてください ---「ID =編集の製品を見つけることができませんでした」というエラーが表示されます。メソッド編集ではなく、編集と呼ばれるPRODUCTを検索しようとします。代わりに私は試してみてください b。 :controller => 'pages'、:action => 'edit' ---「IDなしでページを見つけることができませんでした」というエラーが表示されます。

製品名を確認する前に、編集方法を確認するルートを教えてください。

私は前にこの問題を抱えている

答えて

0

... あなたが欲しいルーティングURLを達成するために行うことができますいくつかのこと...

は、まず、あなたがそこに持っているコードで、私が取ってことをお勧めがありますコマンドラインのrake routesがpage_pathまたはpage_product/product_pageパスに関する何かを生成し、それらの名前付きルートを捕まえるURLを確認してください。

それは非常にあなたが望むもの...そして、あなたは入れてみてください可能性がいない場合:

get '/:id' => 'products#show' 

をご# WHAT_DO_I_TYPE_HERE

が、代わりに、あなたは(その上の制約を置くにあるリンクを参照してくださいする必要があるかもしれません下)あなたはまだこのようになりますルートに設定されて

あなたが本当にやりたい...あなたの/mypage/editmypage/newなどを持つことができるように:

を210
match '/:page_id/:id' => 'products#show', :as => 'product' 

これはこれらのルートの上のどこかにあり、product_show_pathで利用できるようになります。これは、あなたが持っていることを前提としています。

あなたが好きに:as => 'product'部分の名前を変更することができ、

例::as => 'public_product'

は、その後、あなたの製品#ショーのアクションでは

を必要な場所public_products_pathを表示するためにあなたのリンクを更新しますが、その後、実行する必要があります。

@product = Product.find(:id => params[:id], :page_id => params[:page_id]) 

また、経路上に制約を置くこともできます... ここに私自身の参考のために、あなたに役立つかもしれない要点をまとめました。 https://gist.github.com/1908782

また、私はいくつかの方法で役立ちますあまりにもあなたを助けるかもしれない別の質問... https://stackoverflow.com/a/5443829/308701

希望にこの答えに出くわした:D

関連する問題