相关疑难解决方法(0)

Rails表单验证

我有一个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)

我只是想知道我是否会以最好的方式解决这个问题,或者在参数验证方面我是否遗漏了一些明显的东西.我担心这仍然不是最有效的技术,因为我有几个块,我分配一个值 …

forms validation ruby-on-rails

22
推荐指数
2
解决办法
5万
查看次数

标签 统计

forms ×1

ruby-on-rails ×1

validation ×1