В моем приложении у меня есть модели с именем 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
Может кто-нибудь поможет выяснить, где эта ошибка приходит?
Что произойдет, если вы начнете мигать [: notice] = @weekly? – Boltz0r
в методе уничтожения – Boltz0r
Ошибка находится в первой строке метода destroy (извините, просто отредактировал сообщение, чтобы указать это), поэтому я не думаю, что он даже добирается до флеш-уведомлений. – Liz