【问题标题】:How to validate request parameters in rails 4 like laravel 5?如何验证rails 4中的请求参数,如laravel 5?
【发布时间】:2015-05-09 09:44:45
【问题描述】:

我有一个动作控制器来验证来自视图的参数。

定义重复 #params 待验证 参数 = 参数 [:group_to_duplicate] #params 必须经过验证以避免出于某种原因使用方法“find” group = Group.find(params[:id]) #validate 以避免这种“如果” 如果组 group.duplicate 参数 notice = '一些消息' 别的 notice = '其他消息' 结尾 重定向到组路径,注意:注意 结尾

如何验证来自视图的请求参数,例如 laravel 5 enter link description here

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-3.2 laravel-5


    【解决方案1】:

    有时您确实需要验证请求参数,而不是模型。

    例如 API。您经常需要验证给定的参数。也许您需要返回股票报价的 API 的日期范围。

    报价模型是有效的,但为了正确获取它,您需要知道用户需要的范围,因为您不允许他们拥有完整的报价历史记录。类似的东西。

    在搜索表单的情况下也是如此。也许您有一个表单,要求用户在搜索员工之前输入姓氏。

    在这些情况下,您可以使用表单或视图对象来帮助验证。 这是有关表单对象的快速文章: https://robots.thoughtbot.com/activemodel-form-objects

    我也一直在看这个。当我有空闲时间时,我会试一试: https://github.com/nicolasblanco/rails_param

    【讨论】:

      【解决方案2】:

      在大多数情况下,您不必在控制器中验证请求参数。

      模型表单验证(必需、唯一、长度、最大值等)的最佳实践是在模型中定义验证,即 /models/group.rb,并使用诸如作为 simple_form 自动处理您定义的模型验证。

      例如,在您的 group.rb 中,您将拥有:

      class Group < ActiveRecord::Base
        validates :group, presence: true
      end
      

      如果您绝对需要在控制器中进行验证,请使用动作控制器过滤器:http://guides.rubyonrails.org/action_controller_overview.html#filters

      参考资料:

      http://guides.rubyonrails.org/active_record_validations.html https://github.com/plataformatec/simple_form

      【讨论】:

      • 我想要做的是验证与模型属性不匹配的请求参数,所以我正在做的是创建一个非模型与“包括 ActiveModel::Model "并在此处进行验证。你还有什么想法吗?
      • 我不确定我是否理解您要执行的操作。 “验证与模型属性不匹配的请求参数” - 为什么不在模型本身中验证?
      • 因为请求参数不是模型的属性。
      • 例如,在这个“验证器”中,如果属于发出请求的用户,我需要对将重复的组进行验证。
      • @MarcosFelipe 我将使用与您建议的方法相同的方法添加答案:使用include ActiveModel::Model 但不使用... &lt; ActiveRecord::Base 创建一个模型并将其用作表单对象。但似乎您已经达到了相同的解决方案。但是,您似乎需要授权(检查谁可以做什么)。您可以为此尝试 Pundit 或 CanCanCan gem。如果您不在其他任何地方使用授权并且不想为其包含 gem,您可以在控制器中 redirect_to :back, status: :unauthorized, alert: 'You can only duplicate a group which belongs to you.'
      猜你喜欢
      • 2015-10-05
      • 2017-10-21
      • 2015-12-24
      • 2023-03-14
      • 2015-07-26
      • 2015-08-07
      • 2016-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多