Я пытаюсь как можно больше сегментировать код для обратных вызовов логики контроллера. Но я начинаю беспокоиться о производительности. В приведенном ниже примере мне нужно запросить один и тот же экземпляр Vote 3x при обновлении голоса #. В любом случае, чтобы передать объект вокруг, чтобы я мог поддерживать мои обратные вызовы, но только один раз запрос db? Я пропустил какой-то механизм в Rails?Можно объединить удары БД при использовании обратных вызовов в контроллерах?
class VoteController < ApplicationController
#Access limitations etc.
before_action :authenticate_user!
before_action :correct_user_vote, only: [:edit, :update]
before_action :election_concluded_check, only: [:update]
def edit
@vote = Vote.find(params[:id])
end
def update
@vote = Vote.find(params[:id])
if [email protected]? && @vote.update_attributes(vote_params)
redirect_to party_path(@vote.party_id)
else
flash[:error] = "Something went wrong"
redirect_to root_path
end
end
private
def correct_user_vote
vote = Vote.find(params[:id])
if vote.nil? || current_user.id!=vote.user_id
flash[:error] = "Something went wrong"
redirect_to root_path
end
end
def election_concluded_check
# Do not allow updating of votes if party.concluded
vote = Vote.find(params[:id])
if vote.nil? || vote.election.concluded
flash[:error] = "Something went wrong"
redirect_to root_path
end
end
def vote_params
params[:vote].permit(:candidate_id,:note)
end
end