2010-10-04 20 views
76

tengo en mi espacio de nombres routes.rbRails Rutas espacios de nombres y form_for

namespace :businesses do 
    resources :registration 
    end 

Mi controlador está en un subdirectorio de negocios/registration_controller.

def new 
    @business = Business.new 
end 

En mi opinión, yo quiero hacer esto form_for @business do |f| ... pero yo estoy recibiendo el siguiente error:

No route matches {:controller=>"businesses", :action=>"create"}

reinicia el servidor y también estoy conseguir esto:

undefined method paths_business 'para # < #: 0x10339bb20> `

Aquí están mis rutas de rake:

    home_index GET /home/index(.:format)      {:action=>"index", :controller=>"home"} 
      new_user_session GET /users/sign_in(.:format)     {:action=>"new", :controller=>"devise/sessions"} 
       user_session POST /users/sign_in(.:format)     {:action=>"create", :controller=>"devise/sessions"} 
     destroy_user_session GET /users/sign_out(.:format)     {:action=>"destroy", :controller=>"devise/sessions"} 
       user_password POST /users/password(.:format)     {:action=>"create", :controller=>"devise/passwords"} 
      new_user_password GET /users/password/new(.:format)    {:action=>"new", :controller=>"devise/passwords"} 
      edit_user_password GET /users/password/edit(.:format)    {:action=>"edit", :controller=>"devise/passwords"} 
       user_password PUT /users/password(.:format)     {:action=>"update", :controller=>"devise/passwords"} 
    cancel_user_registration GET /users/cancel(.:format)      {:action=>"cancel", :controller=>"devise/registrations"} 
      user_registration POST /users(.:format)       {:action=>"create", :controller=>"devise/registrations"} 
     new_user_registration GET /users/sign_up(.:format)     {:action=>"new", :controller=>"devise/registrations"} 
     edit_user_registration GET /users/edit(.:format)      {:action=>"edit", :controller=>"devise/registrations"} 
      user_registration PUT /users(.:format)       {:action=>"update", :controller=>"devise/registrations"} 
      user_registration DELETE /users(.:format)       {:action=>"destroy", :controller=>"devise/registrations"} 
         users GET /users(.:format)       {:action=>"index", :controller=>"users"} 
         users POST /users(.:format)       {:action=>"create", :controller=>"users"} 
        new_user GET /users/new(.:format)      {:action=>"new", :controller=>"users"} 
        edit_user GET /users/:id/edit(.:format)     {:action=>"edit", :controller=>"users"} 
         user GET /users/:id(.:format)      {:action=>"show", :controller=>"users"} 
         user PUT /users/:id(.:format)      {:action=>"update", :controller=>"users"} 
         user DELETE /users/:id(.:format)      {:action=>"destroy", :controller=>"users"} 
    full_tree_admin_categories GET /admin/categories/full_tree(.:format)  {:action=>"full_tree", :controller=>"admin/categories"} 
      admin_categories GET /admin/categories(.:format)     {:action=>"index", :controller=>"admin/categories"} 
      admin_categories POST /admin/categories(.:format)     {:action=>"create", :controller=>"admin/categories"} 
      new_admin_category GET /admin/categories/new(.:format)    {:action=>"new", :controller=>"admin/categories"} 
      edit_admin_category GET /admin/categories/:id/edit(.:format)  {:action=>"edit", :controller=>"admin/categories"} 
       admin_category GET /admin/categories/:id(.:format)    {:action=>"show", :controller=>"admin/categories"} 
       admin_category PUT /admin/categories/:id(.:format)    {:action=>"update", :controller=>"admin/categories"} 
       admin_category DELETE /admin/categories/:id(.:format)    {:action=>"destroy", :controller=>"admin/categories"} 
businesses_registration_index GET /businesses/registration(.:format)   {:action=>"index", :controller=>"businesses/registration"} 
businesses_registration_index POST /businesses/registration(.:format)   {:action=>"create", :controller=>"businesses/registration"} 
    new_businesses_registration GET /businesses/registration/new(.:format)  {:action=>"new", :controller=>"businesses/registration"} 
edit_businesses_registration GET /businesses/registration/:id/edit(.:format) {:action=>"edit", :controller=>"businesses/registration"} 
     businesses_registration GET /businesses/registration/:id(.:format)  {:action=>"show", :controller=>"businesses/registration"} 
     businesses_registration PUT /businesses/registration/:id(.:format)  {:action=>"update", :controller=>"businesses/registration"} 
     businesses_registration DELETE /businesses/registration/:id(.:format)  {:action=>"destroy", :controller=>"businesses/registration"} 
         root  /(.:format)         {:action=>"index", :controller=>"home"} 
+0

¿Se puede publicar la salida de "rutas de rastreo"? – Bohdan

Respuesta

160

Si ha namespaced rutas mejor manera es:

class Admin::BusinessesController < ApplicationController 
    def new 
    @business = Business.new 
    end 
end 

en routes.rb:

namespace :admin do 
    resources :businesses 
end 

En vista:

form_for [:admin, @business] do |f|... 

Los Docs: http://guides.rubyonrails.org/form_helpers.html sección 2.3.1 se ocupan de espacios de nombres

respecto a su caso:

En routes.rb todo es O'K. En la vista que se debe escribir URL de forma explícita porque tienes variable en el controlador que no sea el nombre del controlador:

form_for @business, :url => business_registration_path do |f|... 

que suponer que en las empresas/registration_controller usted tiene algo como esto:

class Businesses::RegistrationController < ApplicationController 
    def new 
    @business = Business.new 
    end 
end 

Y una observación: No crearía registration_controller para registrar una nueva empresa. Creo que mantener las acciones relacionadas con el negocio en business_controller es mucho más claro.

+0

Sí, eso es lo que tengo para el controlador. De hecho, intenté como sugirió y obtengo el 'método indefinido' business_businesses_path 'para # <# : 0x103384088> ' – Dex

+0

¡Estoy de acuerdo! Sin embargo, necesitaré este tipo de funcionalidad para una subsección de Admin. Tal vez funcionará la próxima vez. – Dex

+0

Respuesta actualizada :) – Voldy

22

En realidad, creo que hay una solución mejor.

form_for [:admin, @business] 

el problema de dar un URL es que si la forma abstracta como una vista parcial, tendrá que hacer frente a "crear" y situaciones de "actualización". Apuntan a diferentes URL y termina proporcionando el @url en el controlador.

+0

Esto ya es parte de la solución de Voldy. La última línea – Dex

+0

@Dex, que es redirect_to – fengd

Cuestiones relacionadas