2016-06-02 2 views
0

В моем приложении у меня есть модели с именем weeklies и scores. Каждый еженедельник has_many забивает и каждый счет belongs_to еженедельно и пользователь. У меня есть методы создания и шоу, которые работают отлично, но когда я пытаюсь удалить счет, я получаю Couldn't find Weekly without an ID.Не удалось найти Еженедельно без идентификатора (Удаление в Rails)

Моя weekly#show страница, где все происходит волшебство:

Поскольку это weekly#show страница, вот мой weeklies_controller, что в моей голове должен обладать юрисдикцией:

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 

Однако, поскольку мы удаляем оценку, а ошибка приводит счетчик баллов (см. обозначенную строку), вот scores_controller:

class ScoresController < ApplicationController 
    before_action :authenticate_user! 


    def index 
     @weekly = Weekly.friendly.find(params[:weekly_id]) 
     @score = Score.new 
     @scores = Score.all 
    end 

    def new 
    @score = Score.new 
    end 

    def create 
    @weekly = Weekly.friendly.find(params[:weekly_id]) 
    score = @weekly.scores.new(score_params) 
    score.user = current_user 

    if score.save 
     flash[:notice] = "Results saved successfully." 
     redirect_to [@weekly] 
    else 
     flash[:alert] = "Results failed to save." 
     redirect_to [@weekly] 
    end 
    end 

    def destroy 
    @weekly = Weekly.friendly.find(params[:weekly_id]) <!-- ERROR CALLED ON THIS LINE --> 
    score = @weekly.scores.find(params[:id]) 

    if score.destroy 
     flash[:notice] = "Results were deleted successfully." 
     redirect_to [@weekly] 
    else 
     flash[:alert] = "Results couldn't be deleted. Try again." 
     redirect_to [@weekly] 
    end 
    end 

    private 

    def score_params 
     params.require(:score).permit(:number, :user_id, :weekly_id) 
    end 
end 

Вот соответствующие маршруты:

  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 

Может кто-нибудь поможет выяснить, где эта ошибка приходит?

+0

Что произойдет, если вы начнете мигать [: notice] = @weekly? – Boltz0r

+0

в методе уничтожения – Boltz0r

+0

Ошибка находится в первой строке метода destroy (извините, просто отредактировал сообщение, чтобы указать это), поэтому я не думаю, что он даже добирается до флеш-уведомлений. – Liz

ответ

0

В конце концов эта проблема была зафиксирована вложенности мои маршруты, как это:

resources :weeklies do 
    resources :scores 
end 

Я должен был изменить HTML от:

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

в

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

И это исключена ошибка.

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