Rails:form_for中的奇怪行为

时间:2012-06-10 18:47:33

标签: ruby-on-rails routes crud form-for

我有一个命名空间资源,但只在控制器目录中。 所以在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

除了动作“new”之外,一切正常,这很奇怪,因为_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| %>

我无法弄清楚错误的位置。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

Rails惯例说控制器应该是多元化的。如果您不想遵循该约定,可以使用以下命令在form_for标记中设置URL:url =&gt; admin_user_path(@user)。我强烈建议您使用Rails约定,否则您将不断遇到需要覆盖默认值的问题。

您可以通过将控制器类更改为Admin::UsersController并将路径更改为resources :users

,轻松更新此代码以使用Rails约定