我有像this guy
这样的类似问题我的控制器具有此功能:
def user_params
params.require(:login)
params.require(:password).permit(:first_name, :last_name, :login, :password,:position)
end
我收到错误
`param not found: login`
这是发布请求。
{"utf8"=>"✓",
"authenticity_token"=>"H+Z0dGaheQPjl3T+0zcGHw3NFYkQ1HLccG1ETcQFbsk=",
"user"=>{"first_name"=>"Max",
"last_name"=>"Werner",
"position"=>"Business Dev Analyst",
"login"=>"login",
"password"=>"[FILTERED]"},
"commit"=>"Create User"}
问题是我的表中有一个名为login的列。我在命令行中通过mysql检查。我手动创建了一个条目,索引函数登录没有问题...相同的哈希:登录
为什么会在这里抛出错误?
答案 0 :(得分:1)
您要求login
的参数位于参数哈希的“顶级”。在您的帖子请求中,login
和password
参数嵌套在user
参数中。
我建议做类似的事情:
params.require(:user).permit(:login, :password)
如果您确定要检查以确保包含login
和password
,则可以执行以下操作:
def user_params
required_params = params.require(:user)
required_params.require(:login)
required_params.require(:password)
required_params.permit(<permitted_params>)
end
你可以链接方法调用,但请记住require
返回给定键的参数:
1.9.3p484 :001 > params = { :name => { :first => "Chris" } }
=> {:name=>{:first=>"Chris"}}
1.9.3p484 :002 > ActionController::Parameters.new(params).require(:name).require(:first)
=> "Chris"
所以,如果你想使用链接,你的方法看起来像这样:
def user_params
params.require(:user)
params.require(:user).require(:login)
params.require(:user).require(:password)
params.require(:user).permit(<permitted_params>)
end
我的意见是前者更清洁,但无论哪种方式都可以获得您想要的结果。
The documentation on parameters实际上非常好,并举了很多例子。我强烈建议您查看它。