在rails中使用用户名slug / short URL时要改变的事情

时间:2012-07-18 18:30:00

标签: ruby-on-rails session url-rewriting url-routing friendly-id

我对rails非常陌生,所以请原谅我,如果我忽略了简单的东西或轨道方式。我的目标是完全替换

形式的URL

/users/1

/username

用于所有目的。 (我认为公开展示ID脚手架就好像走出你的手臂骨头一样。)但实施似乎比我预期的要复杂一些。这似乎改变了rails索引和查找用户的整个方式,而不仅仅是替换查找方法。

虽然我已经使用to_param文件中的user.rb覆盖来实现此功能,但我读过这意味着我将indexing problems down使用params([:username])的道路,我不确定它会如何影响我的

(a)新用户创建时的会话模型,以及

(b)user / show.html.erb文件中的@User用法。

所以,我要么咨询了以下几页(或问了问题):

我想从这个问题中理解的主要问题:

  1. 过渡到此会丢失哪些功能?也就是说,如果我追求这个替代品,那么我现在必须处理并重写的东西“正常工作”?
  2. 作为一种做法,用friendly_id取代更好吗?我担心的是,在我的数据库中创建一个与用户名相同的slug列似乎有点非干,让我感到不舒服,而且我宁愿在可能的情况下避免依赖外部宝石。
  3. 我的用户#show需要看起来像什么?

3 个答案:

答案 0 :(得分:1)

您应该查看友好ID。做你想做的事非常容易。

https://github.com/norman/friendly_id

也有一个Railscast。

http://railscasts.com/episodes/314-pretty-urls-with-friendlyid?view=asciicast

答案 1 :(得分:0)

在解决这个问题几个星期之后,我会说截至2012年8月2日的最佳答案是,如果你这样做,你违反了许多铁轨惯例,撕裂了时间和空间本身的结构。 / p>

URL中丑陋的脚手架是rails用于RESTfulness的必要部分。

答案 2 :(得分:0)

如果您的用户名包含 @, - ,。等特殊字符,并且收到错误消息“No route matches”,则需要过滤其路由。见下文:

match "/user/:username" => 'users#show', :as => :profile, :username => /[\.a-zA-Z0-9_@-]+/