了解正在发生的事情:和rubin中的#,rails路由

时间:2013-09-23 15:37:57

标签: ruby-on-rails hash devise routes symbols

关于这个问题的答案关于Devise中的路线:Devise & Custom Rails User URLs 有一行代码:

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

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

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

当我转到localhost:3000 / 用户名而不是localhost:3000 / user / 用户名时。我假设因为上面的匹配行无法正常工作,并且根据我的路径文件,该网址没有引用任何用户。

第二个网址将我引导至用户的 show 页面,但我不想在网址中添加额外的 / user

所以我试图找出'/:user':as :user_profile 的意思,因为我认为我应该在这里替换一些特定于我的应用程序的东西。我认为:as 是某种别名方法。我在Devise文档中找不到有关名为 user_profile 的路由的任何内容。我不知道'/:user'指的是什么。 User对象的一个​​实例?我用于引用特定用户的数据库中的用户属性/唯一列? (我使用永久链接作为用户定义的网址。)

2 个答案:

答案 0 :(得分:1)

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

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

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

至于为什么这对你不起作用,这可能会导致此条目与其他路由有关,或者由于你的控制器操作本身。发布这些内容可以帮助某人找出确切的原因...

答案 1 :(得分:1)

该路线适合您。这就是为什么你得到错误from users_controller#show

在你的节目动作中,你必须做像User.where(:id => params [:id])这样的事情。但在这种情况下,params中的属性称为:user。因此,为了使两个路线都能正常工作,而不对show动作进行任何更改,请将路线更改为

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