2016-06-02 5 views
0

In meiner App habe ich Modelle mit den Namen weeklies und scores. Jede Woche has_many Punkte und jede Punktzahl belongs_to eine Woche und ein Benutzer. Ich habe die Methoden zum Erstellen und Anzeigen funktioniert gut, aber wenn ich versuche, eine Punktzahl zu löschen, bekomme ich Couldn't find Weekly without an ID.Wöchentlich ohne ID nicht gefunden (Löschen in Rails)

Meine weekly#show Seite ist, wo alles geht:

Da dies die weekly#show Seite, hier ist mein weeklies_controller, die in meinem Kopf Zuständigkeit haben sollte:

class WeekliesController < ApplicationController 
    def index 
    @weeklies = Weekly.all.order("created_at DESC") 
    @most_recent_weekly = Weekly.order("created_at").last 
    end 

    def show 
    @weekly = Weekly.friendly.find(params[:id]) 
    @score = Score.new 
    end 

    def new 
    @weekly = Weekly.new 
    @weekly.user_id = current_user 
    end 

    def create 
    @weekly = Weekly.new(weekly_params) 
    @weekly.user = current_user 

    if @weekly.save 
     flash[:notice] = "Workout of the week was saved successfully." 
     redirect_to @weekly 
    else 
     flash.now[:alert] = "Error creating workout. Please try again." 
     render :new 
    end 
    end 

    def edit 
    @weekly = Weekly.friendly.find(params[:id]) 
    @weekly.user_id = current_user 
    end 

    def update 
    @weekly = Weekly.friendly.find(params[:id]) 

    @weekly.name = params[:weekly][:name] 
    @weekly.teaser = params[:weekly][:teaser] 
    @weekly.instructions = params[:weekly][:instructions] 
    @weekly.difficulty = params[:weekly][:difficulty] 
    @weekly.video = params[:weekly][:video] 
    @weekly.user = current_user 

    if @weekly.save 
     flash[:notice] = "Workout was updated successfully." 
     redirect_to @weekly 
    else 
     flash.now[:alert] = "Error saving workout. Please try again." 
     render :edit 
    end 
    end 

    def destroy 
    @weekly = Weekly.friendly.find(params[:id]) 

    if @weekly.destroy 
     flash[:notice] = "\"#{@weekly.name}\" was deleted successfully." 
     redirect_to action: :index 
    else 
     flash.now[:alert] = "There was an error deleting the workout." 
     render :show 
    end 
    end 

    private 
    def weekly_params 
    params.require(:weekly).permit(:name, :teaser, :instructions, :video, :difficulty, :slug, :user_id) 
    end 
end 

Da jedoch, wir löschen eine Punktzahl und der Fehler zitiert den Punktestand-Controller (siehe markierte Zeile), hier ist die scores_controller:

Hier sind die entsprechenden Routen:

  reports POST /reports(.:format)      reports#create 
      report DELETE /reports/:id(.:format)     reports#destroy 
     weeklies GET /weeklies(.:format)     weeklies#index 
       POST /weeklies(.:format)     weeklies#create 
     new_weekly GET /weeklies/new(.:format)    weeklies#new 
    edit_weekly GET /weeklies/:id/edit(.:format)   weeklies#edit 
      weekly GET /weeklies/:id(.:format)    weeklies#show 
       PATCH /weeklies/:id(.:format)    weeklies#update 
       PUT /weeklies/:id(.:format)    weeklies#update 
       DELETE /weeklies/:id(.:format)    weeklies#destroy 
      scores GET /scores(.:format)      scores#index 
       POST /scores(.:format)      scores#create 
     new_score GET /scores/new(.:format)     scores#new 
     edit_score GET /scores/:id/edit(.:format)    scores#edit 
      score GET /scores/:id(.:format)     scores#show 
       PATCH /scores/:id(.:format)     scores#update 
       PUT /scores/:id(.:format)     scores#update 
       DELETE /scores/:id(.:format)     scores#destroy 

Kann mir jemand helfen herauszufinden, wo dieser Fehler herkommt?

+0

Was passiert, wenn Sie [: notice] = @weekly blinken? – Boltz0r

+0

in der Destroy-Methode – Boltz0r

+0

Der Fehler ist in der ersten Zeile der Methode destroy (Sorry, bearbeitet gerade den Beitrag, um dies anzuzeigen), so glaube ich nicht, es ist sogar zu den Flash-Benachrichtigungen noch zu bekommen. – Liz

Antwort

0

Am Ende dieses Problem durch Verschachtelung meiner Routen wie folgt festgelegt wurde:

resources :weeklies do 
    resources :scores 
end 

hatte ich aus dem HTML-Code zu ändern:

<%= link_to 'Delete', [score], method: :delete %> 

zu

<%= link_to 'Delete', [@weekly, score], method: :delete %> 

Und das den Fehler behoben.