0

名前空間付きのリソースがありますが、コントローラーのディレクトリだけにあります。したがって、routes.rb では次のようになります。

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

そして、これはエラーの原因となるフォームの最初の行です: undefined method `admin_users_path'

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

エラーがどこにあるのかわかりません。何かアドバイスはありますか?

4

1 に答える 1

2

Rails の慣例では、コントローラーは複数形にする必要があります。その慣習に従いたくない場合は、 form_for タグで :url => を使用して URL を設定できますadmin_user_path(@user)。ただし、Rails の規則を使用することを強くお勧めします。そうしないと、デフォルトをオーバーライドする必要があるこのような問題に常に悩まされることになります。

このコードを簡単に更新して、コントローラー クラスを に変更しAdmin::UsersController、ルートを に変更することで、Rails 規則を使用できます。resources :users

于 2012-06-10T18:50:40.530 に答える