关于这个问题的答案关于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对象的一个实例?我用于引用特定用户的数据库中的用户属性/唯一列? (我使用永久链接作为用户定义的网址。)
答案 0 :(得分:1)
设计文档不会引用'user_profile',因为它是一个自定义路由,用于帮助解决提问者(在链接问题中)提出的问题。
match '/:user' => "users#show"
表示“匹配/
之后与先前定义的路由不匹配的单个参数的任何路由,将此路由与UsersController的”show“操作配对(将singe参数传递为'用户')“
使用:as => :anything
修改路由将提供几种辅助方法来引用可在控制器,视图和邮件程序中使用的此路由(在本例中为anything_path
和anything_url
)。
至于为什么这对你不起作用,这可能会导致此条目与其他路由有关,或者由于你的控制器操作本身。发布这些内容可以帮助某人找出确切的原因...
答案 1 :(得分:1)
该路线适合您。这就是为什么你得到错误from users_controller#show
。
在你的节目动作中,你必须做像User.where(:id => params [:id])这样的事情。但在这种情况下,params中的属性称为:user
。因此,为了使两个路线都能正常工作,而不对show动作进行任何更改,请将路线更改为
match '/:id' => "users#show", :as => :user_profile