我的意思是,不仅如此:
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
有什么最佳实践吗?另外,您认为存储此类的最佳位置是什么?