0

というモデルのコンテンツに関連付けられた URL を展開したいと考えていますProduct。現時点では、 にアクセスして特定の製品を表示できますproducts/ID

製品の URL を拡張して、製品名などの説明的な情報を追加したいと考えています。

私は以前to_param、以下のように関数 (Product.rb 内)を調整するようにアドバイスされました。

def to_param
  "#{id}-#{product_name.parameterize}"  
end

ただし、これは現在機能しません。各製品にカーソルを合わせたりクリックしたりすると、各製品に関連付けられた URL が正しく表示されますが、一致する製品が見つかりません。エラーが発生しますno match for ID=ID-specific-product-name

アクセスする/products/idと、特定のアイテムを正常に表示できます

製品名 ( ) を含むこの長い URL を生成する方法を教えてもらえます:product_nameか?

編集

私のコントローラーのshowコントローラーアクションは次のとおりです。

def show
@uniqueturbo = Uniqueturbo.find(params[:id])

respond_to do |format|
  format.html # show.html.erb
  format.xml  { render :xml => @uniqueturbo }
end
end
4

1 に答える 1

1

SEO に適した URL を作成しようとしている場合

http://www.yourdomain.com/products/123123-My-Little-PonyBook

  • このようにルートを変更するのが最も簡単な方法だと思います

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

すると、次のような seo フレンドリーな URL が表示されます。

http://www.yourdomain.com/products/My-Little-PonyBook/123123

この URL を生成するには、ヘルパーを作成します

def url_for_product(product)
  "/products/#{product.title}/#{product.id}"
end
  • もう 1 つの方法は、通常の RESTful ルートを離れて、次のように「id」パラメーターを再解析することです。

    def show
      product_id = params[:id].split('_')[0] # :-)
      # ...
    end
    

それでもヘルパーメソッドが必要ですが、今回は次のようになります。

def url_for_product(product)
   product_path(product) + "_#{product.title.tableize}"
end
于 2013-03-20T19:43:29.843 に答える