0

私が持っている「製品」モデルのより良いURLを作成しようとしていますが、ショーアクションのみです。私は現在、きれいなスラッグを生成するために friend_id を使用していますが、これは問題ありませんが、可能であれば URL フローを改善しようとしています。

現在、私のパスは次のように機能します

    example.com/products/pretty-url-slug

特定の製品を (製品モデルに) 保存するとき、type_of 属性も保存します。Android、iPhone、Windowsのどれが可能性がありますか

だから私は最終的にこのような堅牢なURLを持とうとしています

    example.com/products/iphone/pretty-url-slug

問題は、実際の「iphone」、「android」などのコントローラーを持っていない、または必要だと信じていないことです。しかし、ルートの組み合わせを更新し、アクションを表示して、これを適切に処理したいと思います。

これまでのところ、ルートでキャッチオールを使用してこれを解決しようとしましたが、正しく機能していません。これをエレガントに処理するための提案や別の方法はありますか?

           routes

           resources :products

           # at the bottom of my routes a catch all
           match '*products' => 'products#show'

           # match routes for later time to do something with to act like a  
           # normal category page. 
           match 'products/iphone' => 'products#iphone_index'
           match 'products/android' => 'products#android_index'
           match 'products/windows' => 'products#windows_index'

           show action in the products controller

               def show
                # try to locate the product
                 if params[:product].present?
                  slug_to_lookup = params[:product].split("/").last
                  type_of  = params[:product].split("/").second
                  @product = Product.find_by_slug(slug_to_lookup)
                else
                  @product = Product.find_by_slug(params[:id])
                end


               # redirect if url is not the slug value
               if @product.blank?
                redirect_to dashboard_path
              elsif request.path != product_path(@product)
                redirect_to product_path(@product)
              end
             end

この方法で問題を処理できますが、type_of 属性を追加して有効な URL を生成する方法がわかりません。

4

2 に答える 2

1

次のようにルートを定義するのはどうですか:

':controller/:action/:id/:user_id' を取得

ここで、:controller または :action 以外のものはすべて、params の一部としてアクションで使用できます。

于 2013-09-07T19:09:22.567 に答える