我有一个Rails应用程序,允许用户通过填写一个扩展的表单来构建数据库查询.我想知道在Rails中检查表单参数的最佳实践.以前,我有我的results方法(表单提交的方法)执行以下操作:
if params[:name] && !params[:name].blank?
@name = params[:name]
else
flash[:error] = 'You must give a name'
redirect_to :action => 'index'
return
end
Run Code Online (Sandbox Code Playgroud)
但对于几个表格领域,每个人都看到这个重复,这很令人厌烦.我不能只是将它们全部放在某个循环中以检查每个字段,因为字段设置不同:
params[:name]params[:image][:font_size]等等.这也是重复的,因为我flash[:error]为每个缺失/无效参数设置,并为每个参数重定向到相同的URL.我切换到使用一个before_filter检查所有必要的表单参数,只有一切都没问题才返回true.然后我的results方法继续,变量只是被分配为flat-out,不涉及检查:
@name = params[:name]
Run Code Online (Sandbox Code Playgroud)
在我的validate_form方法中,我有以下代码部分:
if (
params[:analysis_type][:to_s] == 'development' ||
params[:results_to_generate].include?('graph')
)
{:graph_type => :to_s, :graph_width => :to_s,
:theme => :to_s}.each do |key, sub_key|
unless params[key] && params[key][sub_key]
flash[:error] = "Cannot leave '#{Inflector.humanize(key)}' blank"
redirect_to(url)
return false
end
end
end
Run Code Online (Sandbox Code Playgroud)
我只是想知道我是否会以最好的方式解决这个问题,或者在参数验证方面我是否遗漏了一些明显的东西.我担心这仍然不是最有效的技术,因为我有几个块,我分配一个值 …