在params中传递哈希并且无法在控制器中解码它

时间:2014-09-24 17:56:52

标签: ruby-on-rails ruby-on-rails-4 hashmap params ruby-on-rails-4.1

在单选按钮表单帮助器中,我有以下代码:

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]

返回以下错误:

"没有将符号隐式转换为整数"

似乎哈希被读取为字符串并且无法读取符号。怎么办?

1 个答案:

答案 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}"字符串,但它看起来很不寻常