【发布时间】:2011-03-20 11:16:58
【问题描述】:
我仍在学习 Rails 3,但路线让我发疯。我正在尝试使用命名空间来分隔站点的管理部分。问题是命名空间中的某些东西根本不起作用,并且还会路由到错误的位置。例如,通过指定资源来使用 rails 生成的路线,当传递一个对象时,视图指向错误的路线,因此编辑表单将不起作用。
即使路由确实存在,带有 link_to 的链接也不起作用,它说它不存在。首先是 rake 路由输出的命名空间路由。
namespace :admin do
resources :users
end
admin_users GET /admin/users(.:format) {:action=>"index", :controller=>"admin/users"}
POST /admin/users(.:format) {:action=>"create", :controller=>"admin/users"}
new_admin_user GET /admin/users/new(.:format) {:action=>"new", :controller=>"admin/users"}
edit_admin_user GET /admin/users/:id/edit(.:format) {:action=>"edit", :controller=>"admin/users"}
admin_user PUT /admin/users/:id(.:format) {:action=>"update", :controller=>"admin/users"}
DELETE /admin/users/:id(.:format) {:action=>"destroy", :controller=>"admin/users"}
控制器:
class Admin::UsersController < ApplicationController
def index
@users = User.all
end
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def edit
@user = User.find(params[:id])
end
def create
@user = User.new(params[:user])
if @user.save
redirect_to(@user, :notice => 'User was successfully created.')
else
render :action => "new"
end
end
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
redirect_to(admin_users_path, :notice => 'User was successfully updated.')
else
render :action => "edit"
end
end
def destroy
@user = User.find(params[:id])
@user.destroy
redirect_to(admin_users_path)
end
end
示例视图:index.html.erb 列出所有用户
<h1>Listing users</h1>
<table>
<% for user in @users %>
<tr>
<td><%= user.id %></td>
<td><%= user.username %></td>
<td><%= user.email %></td>
<td><%= link_to 'Show', @user %></td>
<td><%= link_to 'Edit', edit_admin_user_path(user) %></td>
<td><%= link_to 'Destroy', admin_user_path, :confirm => 'Are you sure?', :method => :delete %></td>
</tr>
<% end %>
</table>
<br />
<%= link_to 'New User', new_admin_user_path %>
使用编辑视图也有问题。编辑表单应该指向更新路线,但没有。相反,它仅在传递一个用户对象时指向编辑路由(基本上是它自己)。从我一直在阅读的内容来看,在表单中使用对象是推荐的方式,但如果它不起作用,这将不是一件好事。
我在列出所有用户页面时收到此错误。
No route matches {:action=>"update", :controller=>"admin/users"}
Extracted source (around line #17):
17: <td><%= link_to 'Destroy', admin_user_path, :confirm => 'Are you sure?', :method => :delete %></td>
我非常努力地坚持,但这让我发疯。仅供参考:是的,我知道那里有身份验证框架,但我正在尝试从头开始制作一个。这是一种学习体验,因此在我看来,随便使用 gems 和插件并不是正确的选择。
谢谢 八分之一
【问题讨论】:
标签: ruby-on-rails ruby routes