Ошибка маршрутизации пространства имен Rails 3 - маршрут существует, но не работает - PullRequest
0 голосов
/ 22 августа 2011

Это было исправлено. Я думаю, я оставил: method => вставил помощник формы, когда я скопировал его из другого представления, которое я написал. Ложная тревога.

У меня есть маршрут в приложении rails 3, который отображается в 'rake route', но в итоге выдает ошибку отсутствия маршрутов.

Я пытаюсь создать маршрут в пространстве имен для создания и добавления новых пользователей в компании, которой управляет current_user. Пространство имен - это «компания». Контроллер, который должен обрабатывать эту операцию, является 'users_controller' и находится внутри папки controllers-> company.

Мой файл rout.rb содержит этот код:

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

devise_for :users

Мой users_controller.rb в папке app-> controllers-> company содержит этот код:

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 route', я получаю следующее:

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 для аутентификации и при необходимости могу предоставить более подробную информацию о моем приложении. Пока все остальное, что я добавил, прекрасно работает. Я предполагаю, что это как-то связано с тем, как я определяю пространство имен. Я все еще плохо знаком с рельсами, и это моя первая попытка маршрутизации в пространстве имен.

Я прошу прощения, если предоставил слишком много информации или слишком мало. Любая помощь очень ценится.

1 Ответ

1 голос
/ 22 августа 2011

Попробуйте изменить форму для:

form_for([:company,@user])

Это должно работать. Смотри http://guides.rubyonrails.org/form_helpers.html#dealing-with-namespaces

...