0

これが私のlink_to

<%= link_to sub_category.name, controller: :posts, action: :product, id: "#{sub_category.slug}-#{sub_category.id}" %>

URLを指している

http://localhost:3000/posts/product/fifith-category-s-sub-category-2

次のようなURLが必要です

http://localhost:3000/fifith-category-s-sub-category-2

どうすればできますか。

私のルート.rb

resources :posts
match ':controller(/:action(/:id))(.:format)', via: [:get,:post]
4

2 に答える 2

0

/:idパスを に一致させたい場合posts#productは、ルートに次のようなものを含める必要があります。

resources :posts
match ':id', to: 'posts#product`, via: :get
match ':controller(/:action(/:id))(.:format)', via: [:get, :post]
于 2013-10-14T07:32:06.797 に答える
0

@MarekLipka の提案は正しいですが、このようにルートを定義すると、アプリ内の単一レベルの名前空間がすべて占有されます。つまり、「/anything」はデフォルトで にルーティングされますposts#product

何らかの形式の識別子を使用して、どのルートが に行くべきかを判断することをお勧めしposts#productます。何がうまくいくかは、なぜこれをしたいかによって異なります。いくつかのオプションは次のとおりです。

短い名前空間を使用します。

scope '/pp' do 
    get ':id', to: 'posts#product
end
# "/pp/:id" routes to 'posts/product'
# pp is a random short name I picked, it could be anything

# link
<%= link_to sub_category.name, "pp/#{sub_category.slug}-#{sub_category.id}" %> 

制約を使用します。

get ':id', to: 'posts#product`, constraints: { :id => /sub\-category/ }
# only id's with 'sub-cateogry' route to 'posts/product'

# link (assuming that sub_category.slug has 'sub-category' words in it)
<%= link_to sub_category.name, "#{sub_category.slug}-#{sub_category.id}" %>  
于 2013-10-14T07:58:28.843 に答える