2012-06-10 2 views
0

나는 네임 스페이스가 있지만 컨트롤러 디렉토리에만있다. routes.rb에 따라서 는 :레일 : 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 렌더링하기 때문에 이상하다 "편집"에서 동일 행동과 그 잘 작동합니다. 이 admin 디렉토리 내에서 내 컨트롤러 :

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

레일 규칙은 컨트롤러가 복수화되어야한다고 말합니다. 해당 규칙을 따르고 싶지 않으면 url =>admin_user_path(@user)을 사용하여 form_for 태그에 URL을 설정할 수 있습니다. 레일스 규칙을 사용하는 것이 좋습니다. 그렇지 않으면 끊임없이 기본 설정을 무시해야하는이 문제로 계속해서 싸울 것입니다.

쉽게 작동 확인 resources :users

+0

에 컨트롤러 Admin::UsersController에 클래스와 경로를 변경하여 레일 규칙을 사용하려면이 코드를 업데이트 할 수 있습니다. 하지만 왜? 저는 Ror에게 매우 익숙합니다. 왜 편집 작업에서 효과가 있었고, 새로운 것은 효과가 없었습니까? 모든 것이 똑같지 않았습니다. 고맙습니다. – Barbared

+0

댓글에서 설명하기는 다소 어렵지만 기본적으로 Rails는 REST 개념을 기반으로 URL을 작성하는 방법에 대해 특정 가정을합니다. 새로운 객체는 복수화 된 경로에 게시하여 생성되며 객체는 단일 경로로 PUT하여 편집됩니다. 단 한 번의 경로 만 있었으므로 편집이 효과적이었습니다. 내가 할 수있는 것보다 훨씬 나은 라우팅을 설명하기 때문에 http://guides.rubyonrails.org/routing.html을 읽어 보는 것이 좋습니다. –

+0

다시 한 번 감사드립니다. – Barbared