错误的参数数量(2为1)渲染json

时间:2013-06-07 07:48:40

标签: ruby-on-rails ruby-on-rails-3

我正在使用jquery-datatables-rails gem来显示使用json的信息。由于添加了所需的过滤代码,因此无法显示出现上述错误的任何内容。

我已经添加了下面的完整方法,但这是在堆栈跟踪中引发的违规行

render json: SubcontractorsDatatable.new(view_context, @sbcons)

初始化方法

  def initialize(view)
    @view = view
  end

索引方法

  def index
    @sbcons = Subcontractor.scoped
    if filters = params[:filter]
      @sbcons = @sbcons.where(sbcon_type: filters[:type]) unless filters[:type].blank?
      @sbcons = @sbcons.where(cscs_card: filters[:cscs]) unless filters[:cscs].blank?
      @sbcons = @sbcons.where(approved_status: filters[:approved]) unless filters[:approved].blank?
    end
    respond_to do |format|
      format.html
      format.json do
        render json: SubcontractorsDatatable.new(view_context, @sbcons)
      end
    end
  end

堆栈跟踪

ArgumentError (wrong number of arguments (2 for 1)):
  app/datatables/subcontractors_datatable.rb:4:in `initialize'
  app/controllers/subcontractors_controller.rb:35:in `new'
  app/controllers/subcontractors_controller.rb:35:in `block (2 levels) in index'
  app/controllers/subcontractors_controller.rb:32:in `index'

2 个答案:

答案 0 :(得分:1)

如果您阅读了错误消息,您将看到错误消息来自数据表上的initialize方法。

您的数据表初始化定义为def initialize(view)

因为它需要一个参数:view。你传递了两个论点:

SubcontractorsDatatable.new(view_context, @sbcons)

因此,您将2个args传递给期望为1并获得错误的方法。

答案 1 :(得分:1)

您好要更正以下类型:

render json: SubcontractorsDatatable.new(view_context, @sbcons)

初始化方法

  def initialize(view, sbcons)
    @view = view
    @sbcons = sbcons
  end