Rails 3命名空间路由错误 - 路由存在但不起作用

时间:2011-08-21 21:47:39

标签: ruby-on-rails-3 rails-routing

这已得到修复。我猜我离开了:method =>当我从我编写的另一个视图中复制它时,放入表单助手。误报。

我的rails 3应用程序中有一条路线显示在'rake routes'中但最终引发了no route匹配错误。

我正在尝试创建一个命名空间路由,用于在current_user管理的公司下创建和添加新用户。命名空间是“公司”。应该处理此操作的控制器是'users_controller',它位于controllers-> company文件夹内。

我的routes.rb文件包含以下代码:

namespace :company do
  resources :users
  resources :manage, :only => [:show,:edit,:update]
end

devise_for :users

app-> controllers->公司文件夹下的我的users_controller.rb包含以下代码:

def new
  @user = current_user.company.users.new
end

def create
  @user = current_user.company.users.create(params[:user])
  if @user.save
    flash[:notice] = "Successfully Added New User"
    redirect_to company_path(current_user.company.id)
  else
    flash[:warn] = "Correct Errors and Resubmit"
   # render :action => 'new'
  end
end

app-> views-> company-> users-> create.html.erb下的创建操作视图包含:

<h2>Adding User for <%= current_user.company.name %></h2>

<%= form_for(@user, :url => company_users_path) do |f| %>


  <p><%= f.label :email %><br />
  <%= f.email_field :email %></p>

  <p><%= f.label :first_name %><br />
  <%= f.text_field :first_name %></p>

  <p><%= f.label :last_name %><br />
  <%= f.text_field :last_name %></p>

  <p><%= f.label :password, "New Password" %><br />
    <%= f.password_field :password %></p>

  <p><%= f.label :password_confirmation, "Confirm New Password" %><br />
    <%= f.password_field :password_confirmation %></p>

  <p><%= f.submit "Add User" %></p>
<% end %>

<%= link_to "Back", :back %>

最后,当我运行'rake routes'命令时,我得到了这个:

company_users     GET    /company/users(.:format)           {:action=>"index",    :controller=>"company/users"}
                  POST   /company/users(.:format)           {:action=>"create", :controller=>"company/users"}
new_company_user  GET    /company/users/new(.:format)       {:action=>"new", :controller=>"company/users"}
edit_company_user GET    /company/users/:id/edit(.:format)  {:action=>"edit", :controller=>"company/users"}
company_user      GET    /company/users/:id(.:format)       {:action=>"show", :controller=>"company/users"}
                  PUT    /company/users/:id(.:format)       {:action=>"update", :controller=>"company/users"}
                  DELETE /company/users/:id(.:format)       {:action=>"destroy", :controller=>"company/users"}

“新”动作渲染得很好。提交表单后收到的错误是:

Routing Error

No route matches "/company/users

我正在使用devise gem进行身份验证,如果需要,可以提供有关我的应用程序的更多详细信息。到目前为止,我添加的其他内容都很有效。我猜它与我如何定义命名空间有关。我仍然是相当新的rails,这是我第一次尝试命名空间路由。

如果我提供的信息太多或太少,我道歉。任何帮助是极大的赞赏。

1 个答案:

答案 0 :(得分:1)

尝试将form_for更改为:

form_for([:company,@user])

它应该工作。见http://guides.rubyonrails.org/form_helpers.html#dealing-with-namespaces