【问题标题】:Why do I get a TypeError: no implicit conversion of symbol into Integer?为什么我会收到 TypeError:没有将符号隐式转换为整数?
【发布时间】:2016-12-11 18:11:02
【问题描述】:

我正在玩嵌套哈希。任务:

创建三个名为 person1person2person3 的哈希,第一个 和 :first:last 键下的姓氏。然后创建一个参数 哈希使得params[:father]person1params[:mother]person2params[: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:没有将符号隐式转换为整数

为什么?我不明白为什么会收到 TypeError。

【问题讨论】:

  • 参数访问键值对 params = { :father => "person1", :mother => ":person2", :child => "person3" } 和 access params[:father] 给出结果“人1”
  • 明白了。它传递了不止一个让我感到困惑的论点。

标签: ruby


【解决方案1】:

我收到此错误的原因如下...

而不是这样做

<%= form.fields_for :terms, term do |term_form| %>

我正在这样做......

<%= form.fields_for :terms_attributes, term do |term_form| %>

【讨论】:

    【解决方案2】:

    当您将值分配给 params 哈希键时,您提供的是字符串而不是 personx 哈希。正确的方法是代替

    params = { :father => ":person1"...
    

    params = { :father => person1...
    

    错误原因如下。这一行:

    params[:father][:first]
    

    首先获取params[:father] 的值。您希望这个值是一个哈希值,但由于上面的语法错误,它是一个字符串。 String 确实实现了 [] 方法,就像 hash 一样,但它的语义不同。它通过整数索引访问字符串中的字符。它期望索引作为参数传递给[]

    由于您改为传递符号[:first],并且没有将符号转换为整数的默认方法,因此您会收到相应的错误:

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

    【讨论】:

    • 出于某种原因,字符串 "" 让我对语法感到困惑。我现在明白了。
    【解决方案3】:

    使用这些变量名称。如下:

    params = { :father => person1, :mother => person2, :child => person3 }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-02
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      相关资源
      最近更新 更多