Как вы справляетесь со сложными параметрами? - PullRequest
0 голосов
/ 13 января 2019

Я имею в виду, когда это не просто:

def user_params
    params.require(:user).permit(:email)
end

Когда это сложнее, когда вам нужно удалить / дезинфицировать некоторые элементы в зависимости от некоторых условий:

def user_params
    return @user_params if @user_params

    @user_params = params.require(:user).permit(:email)
    @user_params.delete(:email) if @user_params[:email].blank?
    @user_params
end

Еще один пример:

def schedule_params
    return @schedule_params if @schedule_params

    @schedule_params = params.require(:schedule).permit(days: [])
  @schedule_params[:days] = Array(@schedule_params[:days]).map!(&:capitalize)
  @schedule_params[:days].delete_if { |day| !Date::DAYNAMES.include?(day) }
  @schedule_params[:days].uniq!
  @schedule_params
end

Обычно я создаю некоторый класс и выполняю там все операции:

# Usage: ScheduleParams.new(params).params

class ScheduleParams
    attr_reader :params

    def initialize(params)
        @params = params.require(:schedule).permit(days: [])

        sanitize_days!
    end

    private

    def days
        @params[:days]
    end

    def days=(value)
        @params[:days] = value
    end

    def sanitize_days!
      days = Array(days).map!(&:capitalize)
      days.delete_if { |day| !Date::DAYNAMES.include?(day) }
      days.uniq!
    end
end

Есть ли лучшие практики по этому вопросу? Кроме того, какое, по вашему мнению, место для хранения таких классов лучше всего?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...