Rails路由混淆由于:id

时间:2013-04-01 23:43:35

标签: ruby-on-rails ruby-on-rails-3 routing routes

我正在使用设计进行身份验证。注册用户时,请创建我想用作其个人资料路由的个人资料名称。所以,它可能看起来像这样:www.myapp.com/profile-name。我遇到的问题是路线没有到达正确的位置。

的routes.rb

resources :majors do 
  resources :reviews
end 

devise_for :users

...

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

我已经将:user_profile路由放在我的路由文件的底部。我的部分佣金路线如下:

major GET            /majors/:id(.:format)   majors#show
user_profile GET     /:id(.:format)          users#show

在个人资料页面(myapp.com/my-custom-profile-name)上没有任何问题。但是在专业显示页面上,我使用user_profile_path链接到用户的个人资料,网址是www.myapp.com/:id - 其中:id是主要:id。因此,major的id与user_profile:id。

混合在一起

我的用户控制器如下所示:

def show
  @user = User.find_by_profile_name(params[:id])
  @reviews = @user.reviews
end  

我更改了网址,在不同区域进行了测试,更改了路径文件的顺序,整天搜索并测试了这一点。我无法弄清楚我错过了什么。我认为这很简单,但它让我望而却步。有任何想法吗?


解决方案:

解决方案首先让路线正确。由于我创建了一个自定义的动态网址(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) %>

1 个答案:

答案 0 :(得分:1)

要访问特定的用户配置文件,您需要将用户配置文件ID传递到名为route的user_profile中:

user_profile_path(@user)