您如何处理复杂的参数?

时间:2019-01-13 06:36:32

标签: ruby-on-rails ruby

我的意思是,不仅如此:

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

有什么最佳实践吗?另外,您认为存储此类的最佳位置是什么?

0 个答案:

没有答案