Я имею в виду, когда это не просто:
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
Есть ли лучшие практики по этому вопросу? Кроме того, какое, по вашему мнению, место для хранения таких классов лучше всего?