使用Rails(3)在to_param中使用正斜杠'/'清除URL

时间:2010-07-27 21:43:11

标签: ruby-on-rails

这可能吗?

def to_param
  "#{id}%2F#{slug}"
end

这适用于Chrome和Safari,但如果Firefox在地址栏中看到“%2F”。有更清洁的方式吗?

4 个答案:

答案 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/