Rails在模型ArgumentError中更新

时间:2016-12-14 17:36:20

标签: ruby-on-rails

我想在我的模型中进行更新

    self => BookingService(id: integer, currency_code: string, total_price: integer, group_total: integer, other attrs)

但当我update(total_price:1,group_total:1)时,我有

ArgumentError: wrong number of arguments (1 for 2)


[37] pry(BookingService)> update(total_price:1,group_total:1)
ArgumentError: wrong number of arguments (1 for 2)
from /Users/xx/.rvm/gems/ruby-2.2.0@air_api/gems/activerecord-4.1.13/lib/active_record/relation.rb:352:in `update'

[38] pry(BookingService)> self.update(total_price:1,group_total:1)
ArgumentError: wrong number of arguments (1 for 2)
from /Users/xxx/.rvm/gems/ruby-2.2.0@air_api/gems/activerecord-4.1.13/lib/active_record/relation.rb:352:in `update'

为什么会这样?

1 个答案:

答案 0 :(得分:0)

以下是update方法的源代码:

def update(id, attributes)
  if id.is_a?(Array)
    idx = -1
    id.collect { |one_id| idx += 1; update(one_id, attributes[idx]) }
  else
    object = find(id)
    object.update_attributes(attributes)
    object
  end
end

如您所见,该方法期望对记录的引用。

尝试这样做:

self.update(...)

self的引用可以解决您的问题。

http://apidock.com/rails/ActiveRecord/Base/update/class

修改

OP尝试了解决方案但它仍然无效,可能是因为他的方法是ClassMethod

请改为尝试:

update(id, {attr})