2

我对rails很陌生,所以如果我忽略了简单的事情或rails方式,请原谅我。我的目标是完全替换表单的 URL

/users/1

/username

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

虽然我已经to_param在我的文件中使用覆盖来实现这个功能user.rb,但我已经读过这意味着我在使用时会遇到索引 问题 ,而且我不确定它会如何影响我的params([:username])

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

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

因此,我已经查阅了以下页面(或提出了问题):

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

  1. 过渡到这个我会失去什么功能?也就是说,如果我追求这个替换,我必须解决和重写哪些目前在 Rails 中“正常工作”的东西?
  2. 作为一种做法,用friendly_id替换是否更好?我在这里担心的是,在我的数据库中创建一个与用户名相同的 slug 列似乎有点不干燥,让我感到不舒服,我宁愿尽可能避免依赖外部 gem。
  3. 我的 users#show 需要是什么样的?
4

3 回答 3

1

你应该检查友好的ID。让你想做的事情变得非常容易。

https://github.com/norman/friendly_id

它也有一个 Railscast。

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

于 2012-08-10T04:06:26.950 回答
0

如果您的用户名包含特殊字符,例如@、-、. 并得到一个错误,说“没有路由匹配”,那么你需要过滤它的路由。见下文:

match "/user/:username" => 'users#show', :as => :profile, :username => /[\.a-zA-Z0-9_@-]+/
于 2013-05-30T03:48:48.803 回答
-1

在解决这个问题几个星期之后,我想说截至 2012 年 8 月 2 日的最佳答案是,如果你这样做,就会违反许多轨道约定,并撕裂时间和空间本身的结构。

URL 中丑陋的脚手架是 rails 实现 RESTful 方法的必要部分。

于 2012-08-02T17:43:33.140 回答