app/controllers/dashboard/polls_controller.rb
class Dashboard::PollsController < Dashboard::BaseController
include DocumentAttributes
helper_method :poll
before_action :authorize_manage_polls
def index
@polls = Poll.for(proposal)
end
def new
@poll = Poll.new
end
def create
@poll = Poll.new(poll_params.merge(author: current_user, related: proposal))
if @poll.save
redirect_to proposal_dashboard_polls_path(proposal), notice: t("flash.actions.create.poll")
else
render :new
end
end
def edit
end
def update
respond_to do |format|
if poll.update(poll_params)
format.html do
redirect_to proposal_dashboard_polls_path(proposal),
notice: t("flash.actions.update.poll")
end
format.json { head :no_content }
else
format.html { render :edit }
format.json { render json: poll.errors.full_messages, status: :unprocessable_entity }
end
end
end
def destroy
if ::Poll::Voter.where(poll: poll).any?
redirect_to proposal_dashboard_polls_path(proposal), alert: t("dashboard.polls.poll.unable_notice")
else
poll.destroy!
redirect_to proposal_dashboard_polls_path(proposal), notice: t("dashboard.polls.poll.success_notice")
end
end
private
def poll
@poll ||= Poll.includes(:questions).find(params[:id])
end
def poll_params
params.require(:poll).permit(allowed_params)
end
def allowed_params
[:name, :starts_at, :ends_at, :description, :results_enabled,
questions_attributes: question_attributes]
end
def question_attributes
[:id, :title, :author_id, :proposal_id, :_destroy,
question_options_attributes: question_options_attributes]
end
def question_options_attributes
[:id, :_destroy, :title, :description, :given_order, :question_id,
documents_attributes: document_attributes]
end
def authorize_manage_polls
authorize! :manage_polls, proposal
end
end