【问题标题】:How can I make my rails app display url's as the user name?如何让我的 Rails 应用程序将 url 显示为用户名?
【发布时间】:2012-06-17 21:31:23
【问题描述】:

在我的 Rails 应用程序中,用户可以创建一个注册表,并且 URL 是例如:

http://localhost:3000/registries/3

我怎样才能使该网址成为例如:

http://localhost:3000/erinwalker

提前致谢。

【问题讨论】:

  • 附带说明,this 问题有很多有用的信息,如果您想自己实现它:

标签: ruby-on-rails url routes naming-conventions


【解决方案1】:

最简单的方法是在您的 routes.rb 文件底部创建一个新路由:

match "/:username" => "registries#show"

将其放在您的 routes.rb 文件的 底部 很重要,因为这将匹配任何格式为“/whatever”且与它之前的路由不匹配的路由。

这将指向您的注册表控制器的显示操作。所以在那个动作中你可以做

@user = User.find_by_username params[:username]
@registry = @user.registry

【讨论】:

  • 我理解匹配 "/:username" => "registries#show" 到一定程度(我正在使用设计),但为什么要更改我的控制器?他们都准备好工作了。我没有意识到控制器是如此连接到路由?
  • 好吧,当您使用普通路由 (/registries/:id) 时,您将通过其 ID (Registry.find params[:id]) 获取注册表。由于您不想传递其 ID,因此您需要找到与用户模型相关的 ID,因此您必须更改控制器以反映这一点。
  • 对不起,我还是个新手 - 它现在显示:#<0x5768e20>
【解决方案2】:

friendly_id gem 和其他 slugging gem 是 IMO 最简单的方法。

(这是friendly_id railscast.

也就是说,创建一个接受合法 slug 值并重定向或自行查找的路由很容易。

【讨论】:

  • friendly_id gem 不适用于嵌套资源。我在 Rails 的路线上有点挣扎。
猜你喜欢
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 1970-01-01
  • 2020-09-19
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
相关资源
最近更新 更多