Frage Rails Routes Namespaces und form_for


Ich habe Namensraum in meinen routes.rb

  namespace :businesses do
    resources :registration
  end

Mein Controller befindet sich in einem Unterverzeichnis businesses / registration_controller.

def new
  @business = Business.new
end

Aus meiner Sicht möchte ich das tun form_for @business do |f| ... aber ich erhalte folgenden Fehler:

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

Neustart des Servers und ich bekomme auch Folgendes:

undefined methodGeschäftsweg für # <#: 0x10339bb20> `

Hier sind meine Rake Routen:

                   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"}

76
2017-10-04 08:05


Ursprung


Antworten:


Wenn Sie Namespace-Routen haben, ist der beste Weg:

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

in routes.rb:

namespace :admin do
  resources :businesses
end

Im Hinblick auf:

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

Die Dokumente: http://guides.rubyonrails.org/form_helpers.html Abschnitt 2.3.1 Umgang mit Namespaces

In Bezug auf Ihren Fall:

In routes.rb ist alles in Ordnung. In der Ansicht sollten Sie die URL explizit schreiben, da Sie eine Variable im Controller außer dem Controller-Namen haben:

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

Ich nehme an, dass in Unternehmen / registration_controller Sie so etwas haben:

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

Und eine Bemerkung: Ich würde registration_controller nicht für die Registrierung eines neuen Unternehmens erstellen. Ich denke, dass das Halten geschäftsbezogener Aktionen in business_controller viel klarer ist.


163
2017-10-04 08:52



Eigentlich denke ich, dass es eine bessere Lösung gibt.

form_for [:admin, @business]

Das Problem mit der Angabe einer URL ist, dass Sie, wenn Sie das Formular als Teilansicht abstrahieren, sich mit den Situationen "Erstellen" und "Aktualisieren" befassen müssen. Sie weisen auf verschiedene URLs hin und enden mit der Bereitstellung der @url im Controller.


21
2017-12-26 06:12