我有一个控制器,它需要一个带有以下键的哈希:
{:username,:password,:age}
params = {"username"=>"john", "password"=>"secret"}
params
是ActionController::Parameters
类的对象。现在控制器应该给出错误“:age”参数丢失。
如何在Rails中使用require / permit执行此操作?或者还有其他更好的方法在strong_parameters
以外的Rails中对输入参数进行验证吗?
答案 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 }}