我正在玩嵌套的哈希。任务:
首先创建名为
person1
,person2
和person3
的三个哈希值 密钥:first
和:last
下的姓氏和姓氏。然后创建一个参数 哈希,以便params[:father]
为person1
,params[:mother]
为person2
,params[:child]
是person3
。例如,验证是否params[:father][:first]
具有正确的价值。
我的解决方案:
person1 = {first: "first_name1", last: "last_name1"}
person2 = {first: "first_name2", last: "last_name2"}
person3 = {first: "first_name3", last: "last_name3"}
params = { :father => ":person1", :mother => ":person2", :child => ":person3" }
然后params[:father][:first]
给出
TypeError:没有将符号隐式转换为Integer
为什么呢?我不明白为什么会遇到TypeError。
答案 0 :(得分:4)
为params
哈希键分配值时,提供字符串而不是personx
哈希值。正确的方法是代替
params = { :father => ":person1"...
做
params = { :father => person1...
错误的原因如下。这一行:
params[:father][:first]
首先获取params[:father]
的值。您希望此值为哈希值,但由于上面的语法错误,它是一个字符串。 String
确实像哈希一样实现[]
方法,但它的语义不同。它通过整数索引访问字符串中的字符。它希望索引作为参数传递给[]
。
由于您传递了符号[:first]
,并且没有将符号转换为整数的默认方式,因此会出现相应的错误:
TypeError:没有将符号隐式转换为Integer
答案 1 :(得分:0)
使用这些变量名称。如下所示:
params = { :father => person1, :mother => person2, :child => person3 }
答案 2 :(得分:0)
出现此错误的原因如下...
而不是这样做
<%= form.fields_for :terms, term do |term_form| %>
我正在这样做...
<%= form.fields_for :terms_attributes, term do |term_form| %>