我正在使用设计进行身份验证。注册用户时,我会创建一个个人资料名称,我想将其用作他们的个人资料路线。所以,它可能看起来像这样:www.myapp.com/profile-name。我遇到的问题是路线没有去正确的地方。
路线.rb
resources :majors do
resources :reviews
end
devise_for :users
...
match '/:id' => 'users#show', as: :user_profile
我已将 :user_profile 路由放在路由文件的底部。我的部分 rake 路线如下所示:
major GET /majors/:id(.:format) majors#show
user_profile GET /:id(.:format) users#show
在个人资料页面 (myapp.com/my-custom-profile-name) 上没有问题。但是在专业显示页面上,我使用user_profile_path
链接到用户的个人资料,并且 url 是 www.myapp.com/:id - :id 是主要的 :id。因此,专业的 :id 与 user_profile :id 混合在一起。
我的用户控制器如下所示:
def show
@user = User.find_by_profile_name(params[:id])
@reviews = @user.reviews
end
我已经更改了网址,在不同的区域进行了测试,更改了路线文件的顺序,整天搜索和测试。我无法弄清楚我错过了什么。我认为这真的很简单,但它让我望而却步。有任何想法吗?
解决方案:
解决方案是首先让路线正确。由于我创建了一个自定义的动态 url (myapp.com/user-profile-name),我需要在路由中调用 id:
get '/:id' => 'users#show', as: :id
这改变了我的路线看起来像这样:
id GET /:id(.:format) users#show
用户分享评论,他们的名字贴在他们的评论旁边。我无法从他们评论中的姓名链接到他们的个人资料。我能够在这样的视图上做到这一点:
<%= link_to review.user.profile_name, id_path(review.user.profile_name) %>