更新方法的参数数量错误(1表示2)

时间:2016-03-23 13:31:45

标签: ruby-on-rails ruby unit-testing debugging minitest

我有一个问题是追踪为什么我的更新方法没有获得所需的参数。我有一个类似的show测试,有效载荷正在工作。在这种情况下,相关路线是invoice / invoice_id / trip / id。如果你能帮助我发现错误并提出任何关于如何解决这类问题的建议,那将是非常好的。

这是更新方法。

def update
  if @trip.update(@trip.trip_id, trip_params)
    head :no_content
  else
    render json: [@invoice, @trip].errors, status: :unprocessable_entity
  end
end

使用以下私有方法。

private

  def set_trip
    @trip = Trip.where(:invoice_id => params[:invoice_id], :trip_id => params[:id] )
  end

  def trip_params
    params.require(:trip).permit(:trip_id, :depart_airport, :arrive_airport, :passenger_first_name, :passenger_last_name, :passenger_count, :departure_date, :merchant_id)
  end

  def load_invoice
    @invoice = Invoice.find(params[:invoice_id])
  end

end

我的失败测试看起来像这样。

test "should update trip" do
  put :update, invoice_id: @invoice.invoice_id, id: @trip,
   trip: {arrive_airport: @trip.arrive_airport,
   depart_airport: @trip.depart_airport,
   departure_date: @trip.departure_date,
   passenger_count: @trip.passenger_count,
   passenger_first_name: @trip.passenger_first_name, 
   passenger_last_name: @trip.passenger_last_name}
 assert_response 204
end

4 个答案:

答案 0 :(得分:1)

如果您在set_trip中呼叫before_action,则update()方法应如下所示

def update
  if @trip.update(trip_params)
    head :no_content
  else
    render json: [@invoice, @trip].errors, status: :unprocessable_entity
  end
end

update()是一个可以使用object调用的实例方法,你只需要将trip_params传递给它,希望有所帮助!

答案 1 :(得分:1)

当方法调用另一个传递错误数量的参数的方法时,您可以收到此错误消息。

答案 2 :(得分:1)

update将哈希作为唯一的参数,但是您在更新方法中传递了两个参数(@ trip.trip_id,trip_params)。这就是为什么你得到“错误数量的参数(1为2)更新方法”错误消息。正如@RSB所说,只需传入trip_params并更新Trip实例。

答案 3 :(得分:0)

RSB对这笔钱是正确的。在这种情况下,我的问题是在数据库级别。该表没有主键,所以我正在使用 私有方法中的@trip = Trip.where,这导致它返回一个可能的行数而不是特定的行。我在数据库级别更改了主键并更新了私有方法。 VoilàRSB的代码有效!