我有一个 Controller ,它需要一个具有以下键的散列:
{:username,:password,:age}
params = {"username"=>"john", "password"=>"secret"}
params
是 ActionController::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/