NoMethodError:使用as_json时#数组的未定义方法`pages'

时间:2019-07-17 01:42:29

标签: ruby-on-rails ruby ruby-on-rails-5

我知道这是一个已回答的问题,但是今天,当我在数组上设置一个简单的映射时,这个问题又来了!

与普通地图不同,该地图使用as_json

 def index
    @allcomments = @commentable.comments.order('created_at desc')
    .includes(:user,:replies).paginate page: params[:page]

    @comments = @allcomments.map do |comment|
      comment_json = comment.as_json
      comment_json[:user] = comment.user.as_json
      comment_json[:replies] = comment.replies.as_json
      comment_json
    end

    render json: {
      comments: @comments.paginate(page: page),
      page: page,
      pages: @comments.pages,
      status: 200
    }
  end

因为答案应该放在初始化器上,require 'will_paginate/array',或者,ApplicationController上,也应该放在注释控制器上!

因此,有人对will_paginate的这一特定问题有任何线索吗?

1 个答案:

答案 0 :(得分:2)

当您应用map时,将产生一个原始数组,该数组失去了分页功能。您需要保留它。

您可以在此处解决此问题的一件事是为Comment编写一个as_json方法,以正确实现您在map中具有的逻辑,处理user和{{1 }}正确编码。这里的目标是摆脱控制器中的这一步骤,将其移至其所属的模型中。

这将变成:

replies