2011-02-27 86 views
27

我正在尝试手动构建用户模型(不使用routes.rb文件中的'resources:users')。我的routes.rb文件看起来像这样:未定义的方法'user_path'

match '/users/:id', :to => 'users#show' 
match '/all_users', :to => 'users#index' 

这是用户控制我的索引方法:

def index 
    @title = "All users" 
    @users = User.paginate(:page => params[:page]) 
end 

这是我的索引视图:

<h1>All users</h1> 
<%= will_paginate %> 
<ul class="users"> 
    <% @users.each do |user| %> 
    <li> 
     <%= link_to user.email, user %> 
    </li> 
    <% end %> 
</ul> 
<%= will_paginate %> 

我得到这个错误当我打本地主机时出现消息:3000/all_users:

undefined method `user_path' 

我不明白这是从哪里来的,任何人都可以帮忙..?

编辑:

好吧,我发现,在视图中改变“用户”到“@user”使得它的工作:

<%= link_to user.email, @user %> 

但我真的不明白错误信息,或'用户'和'@user'之间的真正区别。另外,点击创建的链接不会重定向到用户页面,它会保留在localhost:3000/all_users上。

回答

60
match '/users/:id', :to => 'users#show' 

应该

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

:as参数告诉路由器如何命名为路径(然后就可以添加_path_url对什么:as参数)。此外,无论您何时直接链接到ActiveRecord模型(例如link_to user.email, user),它都会尝试将user转换为user_path

+0

谢谢你,伟大工程! – newUserNameHere 2014-01-20 23:55:34

+14

对于任何使用rails 4的用户,请改用'get'/ users /:id',:to =>'users#show',:as =>:user' – 2014-01-24 02:12:31

+0

谢谢。作品魅力! – 2016-09-18 17:39:28

1

给大家使用您的routes.rb中post '/users', :to => 'users#create', :as => :user轨道4谁和你控制器render json: @user, status: :created, location: @user_path