[英]Why are attributes coming as a string of a ActionController::Parameters object in Rails 5?
我刚升级到Rails 5。
在为@shift
提交表单后,我尝试在我的控制器中调用:
@position = Position.find params[:shift][:position_id]
我得到'没有隐式转换符号到整数'错误。
当我查看params时:
<ActionController::Parameters {"shift"=>"#<ActionController::Parameters:0x007fecd4e83208>", "sms"=>"true", "controller"=>"admin/overtime", "action"=>"confirm"} permitted: true>
如果我打电话: params.to_h
,我得到:
{"shift"=>"#<ActionController::Parameters:0x007fecd4e83208>", "sms"=>"true", "controller"=>"admin/overtime", "action"=>"confirm"}
移位参数是"#<ActionController::Parameters:0x007fecd4e83208>"
......一个字符串!?
如果我做:
params.require(:shift).permit(:position_id)
我明白了:
NoMethodError: undefined method `permit' for "#<ActionController::Parameters:0x007fecd4e83208>":String
如何检索值?
发生的事情是,在我的ShiftsController
我正在重定向到OvertimeController
确认操作:
admin_overtime_confirm_path(shift: params[:shift], sms: true)
因为在Rails 5中,ActionController :: Parameters不再继承自HashWithIndifferentAccess,所以在应用程序中调用params现在将返回一个对象而不是一个哈希。 所以它发送了ActionController :: Parameters对象的字符串版本。
为了解决这个问题我做了:
admin_overtime_confirm_path(shift: params[:shift].permit!.to_h, sms: true)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.