繁体   English   中英

为什么属性在Rails 5中作为ActionController :: Parameters对象的字符串出现?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM