在单选按钮表单帮助器中,我有以下代码:
f.radio_button :list, {list_id: list.id, activate: false}
返回以下参数:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"wyFM3KzxGwn4UF/uSjaKM8Ld9UFv6MnQKg6mMNKO1ZM=", "user"=>{"list"=>"{:list_id=>28, :activate=>true}"}, "id"=>"341"}
但是试图在控制器中执行此操作:
list_id = params.require(:user).permit(:list)[:list_id]
返回以下错误:
"没有将符号隐式转换为整数"
似乎哈希被读取为字符串并且无法读取符号。怎么办?
答案 0 :(得分:2)
你应该写:
f.radio_button :list, list.id
然后您将拥有:params[:user][:list] => "28"
在您的情况下,您有params[:user][:list] => "{:list_id=>28, :activate=>true}"
,其中您的值不是Hash
而是String
,这是因为您将值radio_button
传递给{list_id: list.id, activate: false}
它被转换为字符串(因为单选按钮不能发送哈希,只是字符串)
如果你需要一些额外的数据,你可以用input type="hidden"
传递它,当然你可以解析你的"{list_id: list.id, activate: false}"
字符串,但它看起来很不寻常