mab*_*ako 2 ruby-on-rails rails-routing
对于我当前的路由,以下ruby on rails代码:
<%= link_to current_user.name, users_path(current_user) %>
Run Code Online (Sandbox Code Playgroud)
它产生如下链接:
<a href="/users.1">name</a>
Run Code Online (Sandbox Code Playgroud)
反过来,Ruby on Rails很难理解这一点,因为它期望1格式为:
ActiveRecord::RecordNotFound in UsersController#show
Couldn't find User without an ID
Request
Parameters:
{"format"=>"1"}
Run Code Online (Sandbox Code Playgroud)
对于Rails来说,这样做并不是很有意义,因为它更应该如此/users/1.但是,手动尝试这个结果会产生以下结果:
Routing Error
No route matches "/users/1"
Run Code Online (Sandbox Code Playgroud)
每手输入带有?id = param的ID,如/users?id=1工作正常.
问题是,我不明白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
Run Code Online (Sandbox Code Playgroud)
除了上面提到的那些动作之外的所有动作都很好,尽管我想找出原因.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"}
Run Code Online (Sandbox Code Playgroud)
这里的问题似乎是用户#show似乎取代了用户#index,这对于/ users来说是正确的.由于这几乎都是默认路由,没有自定义路由的问题,我在这里很无能为力.有任何想法吗?
编辑:用户#show code简单如下:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
end
Run Code Online (Sandbox Code Playgroud)
您可能希望使用您的路线resources :users,而不是resource :users.
另外,更改您link_to的使用user_path而不是users_path:
<%= link_to current_user.name, user_path(current_user) %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3058 次 |
| 最近记录: |