更新 Rails 中的时间属性,超级简单,我很密集

Update time attribute in Rails, SUPER easy, i'm being dense

我有以下 RentalRequest 对象:

#<RentalRequest id: 3, pickup_start: "2015-03-16 21:00:00", pickup_end: "2015-03-16 23:00:00">

我想将 pickup_startpickup_end 更新为 2015-03-17。当我 运行:

RentalRequest.find(3).update_attribute(pickup_end: "2015-03-17 23:00:00")
ArgumentError: wrong number of arguments (1 for 2)

不确定我还需要提供什么其他论据。

如果有帮助,这里是属性本身的类型和输出

RentalRequest.find(3).pickup_end
=> Mon, 16 Mar 2015 23:00:00 UTC +00:00

RentalRequest.find(3).pickup_end.class
=> ActiveSupport::TimeWithZone

看看 at the docs for update_attribute,看看它如何期望 name, value 作为参数?

您传递的 name: value 是一个散列,一个散列的单个参数。这就是为什么您会收到有关参数数量错误的错误,该方法需要 2 个,但您只提供了 1 个。

您可以更改您的代码以调用:update_attribute( :pickup_end, "2015-03-etc..") 或者您可以改用 update_attributes 方法,该方法采用散列。我推荐后者,因为这样您就可以在同一个 SQL 语句和同一个数据库事务中同时更新两个属性:

update_attributes pickup_end: "2015...etc", pickup_start: "2015...etc"