【问题标题】:Ruby on rails array - no implicit conversion of symbol into integerRuby on rails 数组 - 没有将符号隐式转换为整数
【发布时间】:2018-10-04 17:59:12
【问题描述】:

我使用 react js 制作了一个表格组件,它使用列来显示数据(与其他数据一起工作)。例如,第 1 列显示标题,第 2 列显示年份,第 3 列显示格式。

这是我的 JSON 示例:

{"movies": [{"title": "Iron Man", "year": "2008", "format": "DVD"}, {"title": "Iron Man 2", "year": "2010", "format": "DVD"}, {"title": "Iron Man 3", "year": "2013", "format": "DVD"}]}

这是我填充表格的代码,但它似乎不起作用:

@movieList = #Makes a call to my mock API to get list of movies
@movies = Array.new

@movieList.each do |item|
 @movie = Hash.new
 @movie[:column1] = item[:title]
 @movie[:column2] = item[:year]
 @movie[:column3] = item[:format]
 @movies << @movie
end

我需要一些建议来克服我得到的“没有将符号隐式转换为整数错误”。谁能提供一些建议并指出我哪里出错了?

【问题讨论】:

    标签: ruby-on-rails arrays ruby


    【解决方案1】:

    tl;dr

    使用@movieList["movies"].each

    解释

    这里的问题是,当它实际上是一个 hash(假设 @movieList 是你的 JSON显示)。

    each 适用于数组和散列。但是,当您在哈希上使用它时,该块被传递|key, val|。此外,分配块变量是可选的。因此,当您说@movieList.each do |item| 时,item 实际上是散列(“电影”)的顶级键

    诸如“movies”之类的字符串以数字响应[]索引。这就是为什么您会收到错误 no implicit conversion of symbol into integer ... 因为您将符号传递给 String#[] 并且它需要一个整数。

    编写此代码的另一种更惯用的方法是:

    @movies = @movieList["movies"].map do |movie|
      {
        column1: movie["title"],
        column2: movie["year"],
        column3: movie["format"]
      }
    end
    

    【讨论】:

      【解决方案2】:

      尝试重新分配

      @movieList = @movieList[:movies] 这将解决您的问题。您正在尝试迭代一个对象而不是一个数组。

      让我知道它是否能解决您的问题。

      【讨论】:

        【解决方案3】:

        您需要使用 @movieList["movies"] 循环播放电影,因为您的 JSON 是一个哈希值,其中包含一个键“电影”和一个电影数组作为值 => {'movies': [{...},{...},...]}

        正如@maxplener 解释的那样,分配块变量是可选的,但是当您在哈希上使用each 时(在这种情况下是您的JSON)并且只提供一个块变量(而不是两个引用哈希的键和值),您的键值对将转换为块内的双元素数组,其中第一个元素是键,第二个元素是对的值。

        您的 item 在每个块中看起来像这样 - ['movies', [{movie1}, {movie2},..]],因此:

        item[0] # 'movies'
        item[1] # [{movie1}, {movie2},...]
        

        由于数组期望使用整数进行索引并且您提供符号 (item[:title]),您会收到:

        TypeError (no implicit conversion of Symbol into Integer)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-06-21
          • 1970-01-01
          • 1970-01-01
          • 2021-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多