2012-06-10 86 views
0

我有一個命名空間資源,但只是在控制器目錄。 所以在routes.rb中:Rails:奇怪的行爲在form_for

namespace :admin do 
    resources :user 
end 

這意味着這樣的:

admin_user_index GET /admin/user(.:format)     admin/user#index 
       POST /admin/user(.:format)     admin/user#create 
    new_admin_user GET /admin/user/new(.:format)    admin/user#new 
edit_admin_user GET /admin/user/:id/edit(.:format)   admin/user#edit 
     admin_user GET /admin/user/:id(.:format)    admin/user#show 
       PUT /admin/user/:id(.:format)    admin/user#update 
       DELETE /admin/user/:id(.:format)    admin/user#destroy 

,一切工作正常,除了行動「新的」,這是奇怪的,因爲_form呈現在「編輯」一樣行動和工作正常。 這是我的管理目錄中的控制器:

class Admin::UserController < ApplicationController 
# GET /users 
def index 
    @users = User.all 
end 

# GET /users/1 
def show 
    @user = User.find(params[:id]) 
end 

# GET /users/new 
def new 
    @user = User.new 
end 

# GET /users/1/edit 
def edit 
    @user = User.find(params[:id]) 
end 

# POST /users 
def create 
    @user = User.new(params[:user]) 
    respond_to do |format| 
    if @user.save 
     format.html { redirect_to @user, notice: 'User was successfully created.' } 
    else 
     format.html { render action: "new" } 
    end 
    end 
end 

# PUT /users/1 
def update 
    @user = User.find(params[:id]) 
    respond_to do |format| 
    if @user.update_attributes(params[:user]) 
     format.html { redirect_to [:admin ,@user], notice: 'User was successfully updated.' } 
    else 
     format.html { render action: "edit" } 
    end 
    end 
end 

end 

這是造成錯誤的表格的第一行:未定義的方法`admin_users_path」

<%= form_for [:admin, @user] do |f| %> 

我想不出錯誤在哪裏。有任何建議嗎?

回答

2

Rails慣例認爲控制器應該是複數形式的。如果您不想遵循該約定,則可以使用以下內容在form_for標記中設置網址:url =>admin_user_path(@user)。儘管如此,我強烈建議使用Rails約定,否則你會不斷遇到像這樣的問題,你需要覆蓋默認值。

您可以輕鬆地更新此代碼通過改變你的控制器類Admin::UsersController和路由使用Rails的約定來resources :users

+0

好它的工作原理。但爲什麼?我對Ror非常陌生,我不明白爲什麼在編輯操作中它可以正常工作,而在新的操作中它沒有? 一切都是一樣的wasnt'it?感謝您的方式 – Barbared

+0

這在評論中很難解釋,但基本上Rails會根據REST概念對如何構建您的URL進行一定的假設。通過發佈到多元化路線創建新對象,並通過PUTing編輯對象到單一路線。既然你只有一條獨特的路線,那就是編輯工作的原因。我強烈建議閱讀http://guides.rubyonrails.org/routing.html,因爲這說明了路由比我更好。 –

+0

好的再次感謝 – Barbared