这可能吗?
def to_param
"#{id}%2F#{slug}"
end
这适用于Chrome和Safari,但如果Firefox在地址栏中看到“%2F”。有更清洁的方式吗?
答案 0 :(得分:10)
这确实是一个老帖子,但我想在它上面构建一点。
如果您不想在params中处理slug变量,那么您真的需要在模型中定义该方法to_param
def to_param "#{id}/#{title}" end
并设置如此的路线:
resources :posts, :id => /[0-9]+\/.+/
这样你的链接定义看起来很像普通链接:
link_to post.title, post_url(post)
非常简单:http://www.miguelsanmiguel.com/2011/03/17/slug-that-slash
答案 1 :(得分:3)
好的,我刚试过这个,你不需要这个:
def to_param
"#{id}/#{slug}"
end
在routes.rb中(用你需要的东西替换你想要的东西)
match "/expenses/:id/:slug" => "expenses#show", :as => :expense
你的link_to现在应该是这样的
= link_to "something", expense_url(:id => expense.id, :slug => expense.slug)
希望这有点帮助
答案 2 :(得分:2)
看一下Friendly ID - 它会完全消除ID,只需使用slug。它也兼容Rails 3。
答案 3 :(得分:0)
也许这样的事可以帮到你
match "/foo/:id", :to => redirect("/bar/%{id}s")
查看本文中关于rails3和路由
的“重定向方法”部分http://www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3/