nil} Ik vermoed dat de fout is met mijn SpecialsController en de def nieuwe - en def create "> nil} Ik vermoed dat de fout is met mijn SpecialsController en de def nieuwe - en def create "> nil} Ik vermoed dat de fout is met mijn SpecialsController en de def nieuwe - en def create " />

Geen route overeenkomt met geneste bronnen

Ik heb twee bijbehorende tabellen. Locaties en Specials . Een locatie kan veel specials bevatten. Zodra een gebruiker een locatie heeft gemaakt, wil ik hem/haar toestaan ​​een special te maken op de pagina venues # index . Door geneste bronnen te gebruiken, heb ik de gewenste URL bereikt: /venues/5/specials/new .

However, my current code results with: No route matches {:controller=>"specials", :format=>nil}

Ik vermoed dat de fout is met mijn SpecialsController en de def nieuwe - en def create -functies. Ik wil graag dat de URL me naar een formulierpagina brengt waar ik nieuwe gegevens voor de specials kan invoeren

<%= link_to 'Add Special', new_venue_special_path(venue) %>



App1::Application.routes.draw do

  resources :venues do 
    resources :specials
end


def new
    @venue = Venue.find(params[:venue_id])
      @special = @venue.specials.build
        respond_to do |format|
        format.html # new.html.erb
        format.json { render json: @special }
       end
      end


  def create
    @venue = Venue.find(params[:venue_id])
    @special = @venue.specials.build(params[:special])


    respond_to do |format|
      if @special.save
        format.html { redirect_to @special, notice: 'Special was successfully created.' }
        format.json { render json: @special, status: :created, location: @special }
      else
        format.html { render action: "new" }
        format.json { render json: @special.errors, status: :unprocessable_entity }
      end
    end
  end

backtrace

Started GET "/venues/4/specials/new" for 127.0.0.1 at 2011-12-06 23:36:01 +0200
  Processing by SpecialsController#new as HTML
  Parameters: {"venue_id"=>"4"}
  [1m[36mVenue Load (0.2ms)[0m  [1mSELECT "venues".* FROM "venues" WHERE "venues"."id" = $1 LIMIT 1[0m  [["id", "4"]]
Rendered specials/_form.html.erb (1.9ms)
Rendered specials/new.html.erb within layouts/application (2.6ms)
Completed 500 Internal Server Error in 97ms

ActionView::Template::Error (No route matches {:controller=>"specials", :format=>nil}):
    1: <%= form_for(@special) do |f| %>
    2:   <% if @special.errors.any? %>
    3:     <div id="error_explanation">
    4:       

<%= pluralize(@special.errors.count, "error") %> prohibited this special from being saved:

app/views/specials/_form.html.erb:1:in `_app_views_specials__form_html_erb__2784079234875518470_70162904892440' app/views/specials/new.html.erb:7:in `_app_views_specials_new_html_erb__115378566176177893_70162906293160' app/controllers/specials_controller.rb:30:in `new' Rendered /Users/andrewlynch/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.1.3/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.7ms)
2
Plak je routes en je SpecialsController
toegevoegd de auteur JCorcuera, de bron
Toon ons de code van het huidige formulier
toegevoegd de auteur Nerian, de bron
Werkte mijn nieuwe oplossing?
toegevoegd de auteur Taryn East, de bron
Net toegevoegd. Bedankt.
toegevoegd de auteur Andrew Lynch, de bron
Ja het deed, heel erg bedankt :)
toegevoegd de auteur Andrew Lynch, de bron

1 antwoord

redirect_to @special

dit zal standaard "specials_path" zijn, maar je gebruikt venue_special_path

je wilt waarschijnlijk:

redirect_to [@venue, @special]

en in de vorm heb je hetzelfde nodig:

<%= form_for([@venue, @special]) do |f| %>

eigenlijk - het probleem is dat je een geneste bron hebt ... wat betekent dat elke plaats waar je een URL-pad aan het declareren bent (inclusief impliciete plaatsen zoals form_for) vervangen moet worden door zowel de @venue als de @special, in plaats van alleen de speciale.

je kunt deze zelfde "bug" elders in je gegenereerde steigercode tegenkomen ... doe gewoon hetzelfde en je moet goed zijn.

2
toegevoegd
Oké, kun je de volledige backtrace in je vragen plakken? welke coderegel veroorzaakt de fout?
toegevoegd de auteur Taryn East, de bron
Ja, zoals ik al zei - plak de volledige backtrace van de fout (uit uw logs) zodat we kunnen zien welke regel code de fout veroorzaakt. Niet alleen de korte foutmelding (bijv. Geen route ... ) wat we nodig hebben is het volledige spoor - het moet minstens twintig regels robijn bestandsnamen zijn ...
toegevoegd de auteur Taryn East, de bron
Oké, en je probleem is ... niet in een van de code die je hierboven hebt gepost;) En de oplossing is hetzelfde als ik je al heb gegeven: maar je moet het doen in de "form_for." Ik zal het toevoegen naar mijn antwoord.
toegevoegd de auteur Taryn East, de bron
Hallo Ik krijg nog steeds Geen routewedlopen {: controller => "specials",: format => nil}
toegevoegd de auteur Andrew Lynch, de bron
Ik heb format.html {redirect_to @special vervangen, let op: 'Special is succesvol gemaakt.' } met format.html {redirect_to [@venue, @special], let op: 'Special is succesvol gemaakt.' } en ik krijg nog steeds Geen route komt overeen met {: controller => "specials",: format => nil} moet .build in def new is niet .create
toegevoegd de auteur Andrew Lynch, de bron
geplakt in hoofdgedeelte. Bedankt
toegevoegd de auteur Andrew Lynch, de bron