控制器:
def foo
redirect_to home_path(params: auth_params)
end
private
def auth_params
params.require(:auth).permit(:name, :email, :photo_url, :provider, :provider_id)
end
以下是控制器出错的参数:
参数:
{"utf8"=>"✓",
"authenticity_token"=>"...",
"auth"=>
{"name"=>"...",
"email"=>"...",
"photo_url"=>"...",
"provider"=>"...",
"provider_id"=>"..."}
}
出现此错误:unable to convert unpermitted parameters to hash
我允许所有参数(除了rails默认参数(即utf8,authenticity_token,所以为什么会弹出这个错误?
编辑:
以下建议都不起作用:
redirect_to home_path(auth_params)
redirect_to home_path, params: auth_params
关于如何进入控制器操作的更多信息可能有所帮助:
我(在同一个控制器中)一个动作bar
,在视图中有一个form_tag
,转到foo_path。我试过通过jQuery或提交按钮提交表单,它不会改变结果。一旦我点击auth_params
方法,我就会收到错误。
这意味着它在auth_params
方法上出错而不是重定向本身
答案 0 :(得分:0)
home_path
和其他url_for
相关的方法需要一个Hash对象而不是ActionController::Parameters
对象(这是控制器中的params
方法返回的)所以你需要首先将它转换为哈希,如下所示:
redirect_to home_path(auth_params.to_h)
答案 1 :(得分:0)
当我升级到Rails 5.1.4时,我也遇到了这个错误。我用这个
修复了redirect_to(home_path, params: params.require(:auth).permit(:name, :email, :photo_url, :provider, :provider_id))
我希望这对你有所帮助。
答案 2 :(得分:0)
重新启动开发服务器并清除rails放置的所有cookie(最值得注意的是app-name
会话cookie)后,正常的强参数语法(即params.require(。。permit())工作正常。
答案 3 :(得分:0)
您做错了。如果您正在创建资源,则应该通过渲染视图(而不是重定向)来回复验证错误。
您发送给用户的响应是执行非幂等操作的结果。
这似乎很挑剔,但是在GET参数中向用户发送电子邮件和选择的密码非常鲁ck。
如果您要在首页中嵌入表单,只需创建一个auths/new.html.erb
视图即可,该视图仅显示表单并允许用户纠正错误:
class AuthsController
def create
@auth = Auth.new(auth_params)
if @auth.save
redirect_to some_path, success: "Your account was created"
else
render :new
end
end
private
def auth_params
params.require(:auth).permit(:name, :email, :photo_url, :provider, :provider_id)
end
end
如果必须将表单无缝地包含在主页中,那么您需要呈现该视图或使用ajax来执行它。