В Rails ActiveRecord, для чего нужно?

Я слышал о ActiveRecord/ActiveModel Rails, что-то называется "touch". Однако я ничего не нашел, описывая назначение этой функции.

Что он делает, и для чего он полезен?

Ответ 1

В соответствии с Документация API, это метод, который обновляет только указанные временные метки модели с текущим временем. Поэтому, чтобы обновить поле updated_at:

product.touch

или обновить поля updated_at и designed_at:

product.touch(:designed_at) 

Теперь, я никогда раньше не использовал этот метод, но я бы подумал, что было бы полезно в ситуации "набросать" вопрос (например, на переполнение стека) на вершину поискового запроса без фактического изменения содержимого.

Ответ 2

Добавляя к Ryan ответ, не забудьте использовать touch в своих моделях так:

class Book < ActiveRecord::Base
  belongs_to :library, touch: true
end

Теперь, когда вы добавляете книгу в библиотеку, время библиотеки updated_at будет отображать время, когда была добавлена ​​последняя книга! Бонус!

Ответ 3

Это полезно, если вы используете интерфейсную среду, такую как flux (Alt/Redux) или делаете асинхронные вызовы на сервер, чтобы обновить вашу модель. В случае нескольких вызовов API, сделанных на ваш сервер, я использовал его, чтобы сначала проверить синхронизацию "updated_at" модели, прежде чем делать какие-либо сохранения или проверки. Далее, вы можете использовать "touch" для обновления поля "updated_at" соответственно.

Ответ 4

В rails touch используется для обновления поля updated_at для сохраняемых объектов. Но если мы передадим другие атрибуты в качестве аргументов, они тоже обновят эти поля вместе с updated_at. Даже он обновит поля, не относящиеся к дате и времени, если они будут переданы в качестве аргументов.

Например

product.touch(:price) #price is an integer

обновит updated_at товара и установит значение цены как Time.now.to_i