Files
nairobi/app/controllers/budgets/ballot/lines_controller.rb
Javi Martín 4954038076 Only re-render my ballot after voting
We were rendering the whole sidebar again, which wasn't necessary since
most of it remains unchanged. This resulted in complicated code to pass
the necessary information to render the same map that was already
rendered. Furthermore, when users had been moving the map around or
zooming out, we were resetting the map to its default settings after
voting, which was potentially annoying.

This also fixes the wrong investments being displayed in the map after
voting; only the investments on the current page were displayed in this
case while the index displayed all of them.
2023-04-27 17:39:56 +02:00

73 lines
1.8 KiB
Ruby

module Budgets
module Ballot
class LinesController < ApplicationController
before_action :authenticate_user!
before_action :load_budget
before_action :load_ballot
before_action :load_tag_cloud
before_action :load_categories
before_action :load_investments
authorize_resource :budget
authorize_resource :ballot
load_and_authorize_resource :line, through: :ballot, find_by: :investment_id, class: "Budget::Ballot::Line"
def create
load_investment
load_heading
@ballot.add_investment(@investment)
end
def destroy
@investment = @line.investment
load_heading
@line.destroy!
load_investments
end
private
def line_params
params.permit(allowed_params)
end
def allowed_params
[:investment_id, :budget_id]
end
def load_budget
@budget = Budget.find_by_slug_or_id! params[:budget_id]
end
def load_ballot
@ballot = Budget::Ballot.where(user: current_user, budget: @budget).first_or_create!
end
def load_investment
@investment = Budget::Investment.find(params[:investment_id])
end
def load_investments
if params[:investments_ids].present?
@investment_ids = params[:investments_ids]
@investments = Budget::Investment.where(id: params[:investments_ids])
end
end
def load_heading
@heading = @investment.heading
end
def load_tag_cloud
@tag_cloud = TagCloud.new(Budget::Investment, params[:search])
end
def load_categories
@categories = Tag.category.order(:name)
end
end
end
end