2010-10-04 3 views
76

У меня есть пространство имен в моем routes.rbРельсы Маршруты Пространства имен и form_for

namespace :businesses do 
    resources :registration 
    end 

Мой контроллер находится в подкаталоге бизнеса/registration_controller.

def new 
    @business = Business.new 
end 

На мой взгляд, я хочу сделать это form_for @business do |f| ..., но я получаю следующее сообщение об ошибке:

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

перезагрузил сервер, и я также получаю это:

undefined method business_path 'для # < #: 0x10339bb20> `

Вот мои рейк-маршруты:

    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

Можете ли вы опубликовать вывод «рейк-маршруты»? – Bohdan

ответ

160

Если пространство имен маршрутов лучший способ:

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

в routes.rb:

namespace :admin do 
    resources :businesses 
end 

Ввиду:

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

Документах: http://guides.rubyonrails.org/form_helpers.html раздел 2.3.1 Работа с пространствами имен

Что касается вашего случая:

В routes.rb все это O'K. По мнению вы должны написать URL явно, потому что у вас есть переменная в контроллере, кроме имени контроллера:

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

Я полагаю, что в бизнесе/registration_controller у вас есть что-то вроде этого:

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

И еще одно замечание: Я бы не создал register_controller для регистрации нового бизнеса. Я думаю, что сохранение бизнес-действий в business_controller намного яснее.

+0

Да, это то, что у меня есть для контроллера. Я действительно пробовал, как вы предложили, и я получаю 'undefined method' business_businesses_path 'для # <# <Класс: 0x103385d70>: 0x103384088>' – Dex

+0

Я согласен! Тем не менее, мне понадобится этот тип функций для раздела «Администратор». Возможно, он будет работать в следующий раз. – Dex

+0

Ответ обновлен :) – Voldy

22

На самом деле, я думаю, что есть лучшее решение.

form_for [:admin, @business] 

вопрос с давая URL, что если вы абстрагировать форму, как частичный вид, вам придется иметь дело с «создать» и «обновление» ситуации. Они указывают на разные URL-адреса и заканчиваются тем, что обеспечивают контроллер @url.

+0

Это уже часть решения Вольди. Последняя строка. – Dex

+0

@Dex, то есть redirect_to – fengd

Смежные вопросы