0

在这个关于设计中路由的问题的答案中:设计和自定义 Rails 用户 URL 有一行代码:

match '/:user' => "users#show", :as => :user_profile

这显然适用于提问者,但不适用于我。我最终得到

NoMethodError in UsersController#show
undefined method `books' for nil:NilClass

当我去 localhost:3000/ username而不是 localhost:3000/user/ username。根据我的路由文件,我假设是因为上面的匹配行无法正常工作,并且该 url 没有引用任何用户。

第二个 url 将我路由到用户的显示页面,但我不希望 url 中出现额外的/user

所以我试图弄清楚'/:user':as:user_profile的确切含义,因为我认为我应该在这里替换一些特定于我的应用程序的东西。我认为:as是某种别名方法。我在设计文档中找不到关于名为user_profile的路线的任何内容。而且我不知道'/:user'指的是什么。用户对象的实例?我用来指代特定用户的数据库中的用户属性/唯一列?(我为我的用户定义的 url使用永久链接)。

4

2 回答 2

1

设计文档不会引用“user_profile”,因为它是用于帮助解决提问者(在链接问题中)提出的问题的自定义路由。

match '/:user' => "users#show"表示“匹配任何带有单个参数的路由,之后/与先前定义的路由不匹配,将此路由与 UsersController 'show' 操作配对(将单个参数作为 'user' 传递)”

修改路由 using:as => :anything将提供几个辅助方法来引用此路由,这些路由可用于控制器、视图和邮件程序(在本例中为anything_pathanything_url)。

至于为什么这对您不起作用,这可能与此条目有关您的其余路线或由于您的控制器操作本身存在问题。发布这些可以帮助某人找到确切的原因......

于 2013-09-23T15:52:31.900 回答
1

这条路线对你有用。这就是为什么你得到错误from users_controller#show

在您的表演动作中,您必须执行类似 User.where(:id => params[:id]) 的操作。但在这种情况下,您的参数中的属性称为:user. 因此,要使两条路线都能正常工作,而不需要更改 show 操作,请将路线更改为

match '/:id' => "users#show", :as => :user_profile
于 2013-09-23T15:52:50.270 回答