В приложении на Rails 6 я добавляю некоторое кэширование в список пользователей.
В настоящее время мой код выглядит как
# users/index.html.erb
<table>
<tbody>
<%= render @users %>
</tbody>
</table>
# users/_user.html.erb
<% cache(user)do %>
<tr>
<td>
<%= user.name %>
</td>
<td>
<%= user.status %>
</td>
</tr>
Кэширование работает, но фрагменты недействительнывсякий раз, когда атрибут updated_at
изменяется.
Однако, чтобы оптимизировать его, я бы хотел сделать его недействительным только при изменении одного из отображаемых атрибутов. Например, я не хочу новый фрагмент, когда пользователь обновляет свой собственный пароль.
Каков предпочтительный способ достижения этого? Код ниже, кажется, работает, но я хотел бы убедиться, что он не имеет откатов.
<% cache [user.name, user.status] do %>
Является ли это предпочтительным способом также при включении в ключ нескольких атрибутов? Т.е.
<% cache [user.name, user.status, user.email, user.role, user.whatever] do %>
Более того, допустим, я хочу кэшировать всю таблицу. Какой ключ я должен использовать? @users
на самом деле не работает.