【问题标题】:Rails routing confusion due to :id由于 :id 导致的 Rails 路由混乱
【发布时间】:2013-04-01 23:43:35
【问题描述】:

我正在使用设备进行身份验证。注册用户时,我会创建一个个人资料名称,我想将其用作他们的个人资料路线。所以,它可能看起来像这样: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 路由放在路由文件的底部。我的部分 rake 路线如下所示:

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。因此,专业的 :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) %>

【问题讨论】:

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


    【解决方案1】:

    要获取特定的用户配置文件,您需要将用户配置文件 ID 传递到 user_profile 命名路由:

    user_profile_path(@user)

    【讨论】:

    • 这会导致以下路由错误:没有路由匹配 {:controller=>"users", :action=>"show", :id=>nil}
    • 如何在视图中使用路径助手?
    • 这只是一个例子,我猜@user 返回 nil。您需要以任何您想要的方式将用户传递给助手。我不知道你的“主要”控制器是什么样的,但你需要在那里设置一个用户变量,然后像我的例子一样将它传递给助手。
    • 感谢你的帮助 messick - 你让我朝着正确的方向前进。
    猜你喜欢
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    相关资源
    最近更新 更多