我在繼續學習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 %>
使用編輯視圖也有問題。編輯表單應該指向更新路由,但不是。相反,它只在傳遞一個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>
我很想努力堅持下去,但是這讓我感到疲倦。僅供參考:是的,我知道有認證框架,但我正在嘗試從頭開始制定認證框架。這是一種學習體驗,因此,僅僅使用寶石和插件就不會成爲我認爲的方式。
謝謝 Onyth
已經工作了,謝謝你,但仍然是一個形式問題。 <%=的form_for:用戶做%> 使得 <形式行動= 「/管理/用戶/ 1 /編輯」 方法= 「POST」> 但應/管理/用戶/ 1和上放置方法進行更新。如果我在表單標籤中使用@user,它只會拋出user_path – pieterk 2011-03-20 11:36:48
嘗試'<%= form_for [:admin,@user] do%>' – Teoulas 2011-03-20 13:08:33
奇怪的Rails腳手架如何正確處理名稱空間。 – pieterk 2011-03-20 14:15:11