Я слышал о ActiveRecord/ActiveModel Rails, что-то называется "touch". Однако я ничего не нашел, описывая назначение этой функции.
Что он делает, и для чего он полезен?
Я слышал о ActiveRecord/ActiveModel Rails, что-то называется "touch". Однако я ничего не нашел, описывая назначение этой функции.
Что он делает, и для чего он полезен?
В соответствии с Документация API, это метод, который обновляет только указанные временные метки модели с текущим временем. Поэтому, чтобы обновить поле updated_at
:
product.touch
или обновить поля updated_at
и designed_at
:
product.touch(:designed_at)
Теперь, я никогда раньше не использовал этот метод, но я бы подумал, что было бы полезно в ситуации "набросать" вопрос (например, на переполнение стека) на вершину поискового запроса без фактического изменения содержимого.
Добавляя к Ryan ответ, не забудьте использовать touch в своих моделях так:
class Book < ActiveRecord::Base
belongs_to :library, touch: true
end
Теперь, когда вы добавляете книгу в библиотеку, время библиотеки updated_at
будет отображать время, когда была добавлена последняя книга! Бонус!
Это полезно, если вы используете интерфейсную среду, такую как flux (Alt/Redux) или делаете асинхронные вызовы на сервер, чтобы обновить вашу модель. В случае нескольких вызовов API, сделанных на ваш сервер, я использовал его, чтобы сначала проверить синхронизацию "updated_at" модели, прежде чем делать какие-либо сохранения или проверки. Далее, вы можете использовать "touch" для обновления поля "updated_at" соответственно.
В rails touch используется для обновления поля updated_at
для сохраняемых объектов. Но если мы передадим другие атрибуты в качестве аргументов, они тоже обновят эти поля вместе с updated_at
. Даже он обновит поля, не относящиеся к дате и времени, если они будут переданы в качестве аргументов.
Например
product.touch(:price) #price is an integer
обновит updated_at
товара и установит значение цены как Time.now.to_i