2015-03-17 3 views
1

У меня есть следующие RentalRequest объект:Update атрибут времени в Rails, супер просто, я хочу быть плотными

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

Я хотел бы обновить pickup_start и pickup_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 

ответ

2

Look 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" 
+0

ой супер странно ... похоже, это всегда было случай, но часть причины, по которой я задал этот вопрос, заключается в том, что я использую update_attribute ВСЕ ВРЕМЯ, поскольку он обходит проверку и всегда использовал синтаксис name: value, и он работал до ... – james

+0

@james подпись 'update_attribute' была то же самое с rails 1.0.0. Вы должны использовать 'update_attributes', если вы передавали аргумент Hash. И если вам нужно установить оба, я бы использовал перед обратным вызовом, чтобы обрабатывать настройку 'pickup_start' таким образом, если вам когда-либо понадобится изменить эту логику, вам нужно изменить ее только один раз. – engineersmnky