如何使用permit或require过滤params哈希中的密钥?

时间:2015-04-30 13:17:23

标签: ruby-on-rails ruby

我有一个控制器,它需要一个带有以下键的哈希:

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

paramsActionController::Parameters类的对象。现在控制器应该给出错误“:age”参数丢失。  如何在Rails中使用require / permit执行此操作?或者还有其他更好的方法在strong_parameters以外的Rails中对输入参数进行验证吗?

2 个答案:

答案 0 :(得分:1)

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

validates :age, presence: true, allow_blank: false

您还应该允许:在控制器中的strong_parameters方法中使用age。正如穆罕默德指出的那样,这需要这样的事情:

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

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

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

希望这有帮助。

答案 1 :(得分:0)

您可以将许可证用作:

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

并且您的年龄参数是以您的形式呈现:

<%= form_for @user do |f| %>
  <%= f.text_field :name %>
  <%= f.password_field :password %>
  <%= f.text_field :age %>

   .....
<% end %>

基本上Action期望你的params哈希如下:

params{"user" => {"name": name, "password": password, "age": 13 }}