我正在尝试为我拥有的“产品”模型制定一些更好的网址,仅在展示操作上。我目前正在使用friend_id 来生成漂亮的slug,这很好,但如果可以的话,我正在尝试改进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。