Files
grecia/app/controllers/admin/poll/questions/answers_controller.rb
Javi Martín 11832cc07d Make it easier to customize allowed parameters
When customizing CONSUL, one of the most common actions is adding a new
field to a form.

This requires modifying the permitted/allowed parameters. However, in
most cases, the method returning these parameters returned an instance
of `ActionController::Parameters`, so adding more parameters to it
wasn't easy.

So customizing the code required copying the method returning those
parameters and adding the new ones. For example:

```
def something_params
  params.require(:something).permit(
    :one_consul_attribute,
    :another_consul_attribute,
    :my_custom_attribute
  )
end
```

This meant that, if the `something_params` method changed in CONSUL, the
customization of this method had to be updated as well.

So we're extracting the logic returning the parameters to a method which
returns an array. Now this code can be customized without copying the
original method:

```
alias_method :consul_allowed_params, :allowed_params

def allowed_params
  consul_allowed_params + [:my_custom_attribute]
end
```
2022-04-07 19:35:40 +02:00

73 lines
1.6 KiB
Ruby

class Admin::Poll::Questions::AnswersController < Admin::Poll::BaseController
include Translatable
include DocumentAttributes
before_action :load_answer, only: [:show, :edit, :update, :documents]
load_and_authorize_resource :question, class: "::Poll::Question"
def new
@answer = ::Poll::Question::Answer.new
end
def create
@answer = ::Poll::Question::Answer.new(answer_params)
@question = @answer.question
if @answer.save
redirect_to admin_question_path(@question),
notice: t("flash.actions.create.poll_question_answer")
else
render :new
end
end
def show
end
def edit
end
def update
if @answer.update(answer_params)
redirect_to admin_question_path(@answer.question),
notice: t("flash.actions.save_changes.notice")
else
render :edit
end
end
def documents
@documents = @answer.documents
render "admin/poll/questions/answers/documents"
end
def order_answers
::Poll::Question::Answer.order_answers(params[:ordered_list])
head :ok
end
private
def answer_params
params.require(:poll_question_answer).permit(allowed_params)
end
def allowed_params
attributes = [:title, :description, :given_order, :question_id,
documents_attributes: document_attributes]
[*attributes, translation_params(Poll::Question::Answer)]
end
def load_answer
@answer = ::Poll::Question::Answer.find(params[:id] || params[:answer_id])
end
def resource
load_answer unless @answer
@answer
end
end