Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:如何为自定义数组使用CollectionSerializer_Ruby On Rails_Arrays_Active Model Serializers - Fatal编程技术网

Ruby on rails Rails:如何为自定义数组使用CollectionSerializer

Ruby on rails Rails:如何为自定义数组使用CollectionSerializer,ruby-on-rails,arrays,active-model-serializers,Ruby On Rails,Arrays,Active Model Serializers,我有一个从许多来源合并的数组。例如: list_items = [] items.each do |item| # I convert details list to array by using to_a list_items.push(item.item_details.to_a) end 然后我使用该自定义数组并序列化: { data: ActiveModel:

我有一个从许多来源合并的数组。例如:

        list_items = []
        items.each do |item|
          # I convert details list to array by using to_a
          list_items.push(item.item_details.to_a)
        end
然后我使用该自定义数组并序列化:

        {
            data: ActiveModel::Serializer::CollectionSerializer.new(
                list_items,
                serializer: ItemSerializer)
        }
然后我遇到了一个例外:

NoMethodError(数组0x007fcee2290460的未定义方法“读取\u属性\u进行\u序列化”)

如果以上代码我不使用
来_a
但是:

          list_items.push(item.item_details)
我会遇到不同的例外情况:

Item::ActiveRecord\u Associations\u CollectionProxy:0x007fcee67ae的未定义方法“读取\u属性\u以进行\u序列化”


请为我解释为什么会遇到此异常,以及如何修复此异常。

我认为这应该适用于您。试试看

{
 data: ActiveModel::ArraySerializer.new(list_items, each_serializer: ItemSerializer).to_json 
}

我想这应该对你有用。试试看

{
 data: ActiveModel::ArraySerializer.new(list_items, each_serializer: ItemSerializer).to_json 
}

我已经找到了我问题的答案。我的问题是因为我在数组中插入了一个数组。Ruby将创建二维数组,因此我的
CollectionSerializer
在这种情况下无法工作。(因为我假设这是一维数组)。下面是修正:

    list_items = []
    items.each do |item|
      # I convert details list to array by using to_a
      # list_items.push(*item.item_details.to_a)

      # using * operator before array for flattening array
      list_items.push(*item.item_details)
    end
在这之后,一切都像一个魅力

    {
        data: ActiveModel::Serializer::CollectionSerializer.new(
            list_items,
            serializer: ItemSerializer)
    }
您可以在此处获得更多详细信息:


希望对你有所帮助。

我已经找到了问题的答案。我的问题是因为我在数组中插入了一个数组。Ruby将创建二维数组,因此我的
CollectionSerializer
在这种情况下无法工作。(因为我假设这是一维数组)。下面是修正:

    list_items = []
    items.each do |item|
      # I convert details list to array by using to_a
      # list_items.push(*item.item_details.to_a)

      # using * operator before array for flattening array
      list_items.push(*item.item_details)
    end
在这之后,一切都像一个魅力

    {
        data: ActiveModel::Serializer::CollectionSerializer.new(
            list_items,
            serializer: ItemSerializer)
    }
您可以在此处获得更多详细信息:


希望有此帮助。

Rails 5中的阵列序列化器已被CollectionSerializer取代Rails 5中的阵列序列化器已被CollectionSerializer取代