gpt4 book ai didi

ruby-on-rails - Rails 的资源有 'show' 映射但没有 ID 并创建/users.id 链接而不是/users/id

转载 作者:行者123 更新时间:2023-12-04 05:57:35 27 4
gpt4 key购买 nike

对于我当前的路由,以下 ruby​​ on rails 代码:

<%= link_to current_user.name, users_path(current_user) %>

生成如下链接:

<a href="/users.1">name</a>

反过来,Ruby on Rails 很难理解这一点,因为它希望 1 的格式为:

ActiveRecord::RecordNotFound in UsersController#show 
Couldn't find User without an ID

Request
Parameters:
{"format"=>"1"}

对于 Rails 来说,这样路由它并没有什么意义,因为它更应该是 /users/1。然而,手动尝试会得到以下结果:

Routing Error
No route matches "/users/1"

使用 ?id= 参数(例如 /users?id=1)每手输入 ID 效果很好。

问题是,我不明白 users.id 的来源,也不明白如何修复 - 我的路由文件看起来像

routes::Application.routes.draw do
get "register" => "users#new", :as => "register"
get "login" => "sessions#new", :as => "login"
post "login" => "sessions#create", :as => "do_login"
get "logout" => "sessions#destroy", :as => "logout"

resource :users

root :to => "pages#welcome"
end

除上述操作外,所有操作都可以正常工作,但我想找出原因。 rake routes 如下所示:

     users POST   /users(.:format)      {:action=>"create", :controller=>"users"}
new_users GET /users/new(.:format) {:action=>"new", :controller=>"users"}
edit_users GET /users/edit(.:format) {:action=>"edit", :controller=>"users"}
GET /users(.:format) {:action=>"show", :controller=>"users"}
PUT /users(.:format) {:action=>"update", :controller=>"users"}
DELETE /users(.:format) {:action=>"destroy", :controller=>"users"}

这里的问题似乎是 users#show 似乎已经取代了 users#index,这对/users 来说是正确的做法。由于就手头的问题而言,这几乎都是默认路由,没有自定义路由,所以我在这里一无所知。有什么想法吗?

编辑:users#show 代码很简单:

class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
end

最佳答案

您可能希望您的路由使用resources :users,而不是resource :users

此外,将您的 link_to 更改为使用 user_path 而不是 users_path:

<%= link_to current_user.name, user_path(current_user) %>

关于ruby-on-rails - Rails 的资源有 'show' 映射但没有 ID 并创建/users.id 链接而不是/users/id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6206059/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com