pie*_*erk 0 ruby routes ruby-on-rails
我正在学习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"}
Run Code Online (Sandbox Code Playgroud)
控制器:
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
Run Code Online (Sandbox Code Playgroud)
示例视图: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 %>
Run Code Online (Sandbox Code Playgroud)
使用编辑视图也存在问题.编辑表单应指向更新路由但不指向.相反,当仅传递User对象时,它指向编辑路径(基本上是自身).从我一直在阅读使用表单中的对象是推荐的方式,但如果它不起作用,这是一件好事.
我在列出所有用户页面时收到此错误.
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>
Run Code Online (Sandbox Code Playgroud)
我是如此努力坚持不懈,但这让我变得不稳定.仅供参考:是的我知道那里有认证框架,但我试图从头开始制作一个.这是一种学习体验,因此只是使用宝石和插件不是我认为的方式.
谢谢Onyth
您在删除链接中缺少ID
试试吧
<td><%= link_to 'Destroy', admin_user_path(user), :confirm => 'Are you sure?', :method => :delete %></td>
Run Code Online (Sandbox Code Playgroud)
(将admin_user_path更改为admin_user_path(user)作为链接)
| 归档时间: |
|
| 查看次数: |
5514 次 |
| 最近记录: |