ruby-on-rails - 如何使用 permit 或 require 过滤 params hash 中的键?

标签 ruby-on-rails ruby

我有一个 Controller ,它需要一个具有以下键的散列:

{:username,:password,:age}
params =  {"username"=>"john", "password"=>"secret"}

paramsActionController::Parameters 类的一个对象。现在 Controller 应该给出错误“:age”参数丢失。 我如何在 Rails 中使用 require/permit 来做到这一点?或者除了 strong_parameters 之外,还有其他更好的方法来验证 Rails 中的输入参数吗?

最佳答案

我会在您的模型中使用简单的验证方法来完成。像这样:

validates :age, presence: true, allow_blank: false

您还应该在 Controller 的 strong_parameters 方法中允许 :age。正如 Mohammed 所指出的,这将需要这样的东西:

params.require(:user).permit(:name, :password, :age)

但这与验证无关。它只是将用户通过表单提供的参数列入白名单,以防止在创建或更新模型时在批量分配属性时发生某些类型的攻击。<​​/p>

一旦您的参数被列入白名单,您的验证回调将在创建或保存新对象之前启动。如果属性“age”缺失或为 nil,则之前的方法将给出验证错误,您可以在 @user.errors.messages 或模型的任何名称中阅读该错误。这样,除非 :age 不为空,否则您的对象将不会被保存。

希望这对您有所帮助。

关于ruby-on-rails - 如何使用 permit 或 require 过滤 params hash 中的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29968808/

相关文章:

ruby-on-rails - has_one owns_to 关联属性验证

ruby - 如何跨同一模块的类访问类实例变量?

ruby - MRI Ruby 1.8 使用什么样的内存回收算法?

ruby-on-rails - RSpec valid_attributes 在验证相关模型时添加什么

ruby - 为什么 rspec 用分数报告时间?

ruby - 如何以特定用户身份运行 Chef 资源

ruby - 一元运算符的运算符优先级

ruby-on-rails - 设置用于在 Rails 中发送邮件的 SMTP 设置

ruby-on-rails - Ruby on Rails - 为评论评级字段按小数点迭代数字

ruby-on-rails - 使用 Faraday 和 Omniauth 进行 Rails 集成测试