Question

Je pense que je pense à tout faux routage. J'ai un set-up très simple, deux modèles: Produit et Photo. has_many du produit: photos, photo belongs_to. produit

a produit un échafaudage complet en photo a une photos_controller que je travaille.

En routes.rb nous avons:   resources :products (généré par l'échafaud)

Comme les photos sont une ressource imbriquée d'un produit que je change cela:

resources :products do
    resources :photos
  end

et enfin:

root :to => "products#index"

râteau Heureusement routes crache:

  products GET             {:controller=>"products", :action=>"index"}
  products POST            {:controller=>"products", :action=>"create"}
  new_product GET          {:controller=>"products", :action=>"new"}
  edit_product GET         {:controller=>"products", :action=>"edit"}
  product GET              {:controller=>"products", :action=>"show"}
  product PUT              {:controller=>"products", :action=>"update"}
  product DELETE           {:controller=>"products", :action=>"destroy"}
  product_photos GET       {:controller=>"photos", :action=>"index"}
  product_photos POST      {:controller=>"photos", :action=>"create"}
  new_product_photo GET    {:controller=>"photos", :action=>"new"}
  edit_product_photo GET   {:controller=>"photos", :action=>"edit"}
  product_photo GET        {:controller=>"photos", :action=>"show"}
  product_photo PUT        {:controller=>"photos", :action=>"update"}
  product_photo DELETE     {:controller=>"photos", :action=>"destroy"}
  products GET             {:controller=>"products", :action=>"index"}
  products POST            {:controller=>"products", :action=>"create"}
  new_product GET          {:controller=>"products", :action=>"new"}
  edit_product GET         {:controller=>"products", :action=>"edit"}
  product GET              {:controller=>"products", :action=>"show"}
  product PUT              {:controller=>"products", :action=>"update"}
  product DELETE           {:controller=>"products", :action=>"destroy"}
  root                     {:controller=>"products", :action=>"index"}

ce qui signifie que la forme de produits / nouveaux produits livrons dans le # créer que je veux rediriger ensuite les photos # nouvelles et un formulaire pour télécharger les product_photos générés par les photos correspondantes / new.html.erb qui POST aux photos # créer, droit?

product_controller.rb:

def create
    @product = Product.new(params[:product])

    respond_to do |format|
      if @product.save
        redirect_to new_product_photo_path, :notice => 'Product was successfully created.'
      else
        render :action => "new"
      end
    end
  end

et photos_controller.rb (pour l'instant):

def new
    @photo = Photo.new
  end

Alors, pourquoi oh pourquoi, oh pourquoi dois-je obtenir:

Routing Error

No route matches {:controller=>"photos", :action=>"new"}

lorsque les routes de râteau est clairement dit que je fais, j'ai photos_controller, une nouvelle action dans le photos_controller et new_product_photo_path demande clairement d'aller dans le bon sens? (J'ai aussi des photos / new.html.erb qui a simple <h1>Photos</h1> quelque chose à rendre).

Je ne peux conclure que je pense à tout cela dans le mauvais sens, ou que je l'ai fait une erreur dans la convention sur la configuration que je ne vois pas.

Tout le monde?

Merci et Cordialement, Adam

Était-ce utile?

La solution

Réponse Mise à jour:

En utilisant un moyen de ressources imbriqués (dans ce cas) que vous ne pouvez créer une nouvelle photo dans le contexte d'un produit. Cela signifie que l'application doit savoir quel produit la photo à créer appartient.

Dans le cas de votre redirect cela signifie que vous devez ajouter l'objet produit en tant que paramètre new_product_photo_path:

redirect_to new_product_photo_path(@product)

Réponse d'origine:

Ceci est parce que vous l'avez fait une ressource imbriquée. /products/1/photos/new ne fonctionne probablement. Si vous voulez être en mesure de créer de nouvelles photos via /photos/new aussi, vous devez ajouter une ressource « non imbriquées » aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top