Запустить действие при переходе по ссылке на страницу с тем же действием (VoltRb)

В http://localhost:3000/books, У меня есть страница указателя, где у меня есть список книг.

Когда вы нажимаете на одну из ссылок, действие, с которым она связана, bookувольняют:

Однако, когда вы нажимаете на одну из ссылок на одной из страниц книги, book действие не начинается

Обратите внимание, что при щелчке ссылок URL-адрес изменяется и со страницы индекса, и со страниц книги, но проблема в том, что book не активируется при нажатии на ссылку на страницу книги с другой страницы книги. Как я могу исправить такую ​​ситуацию?

К вашему сведению, здесь есть репозиторий, где эту проблему можно воспроизвести.

3 ответа

Решение

Как оказалось, вольт-вычисления - это способ решить эту проблему. Используя params Коллекция, вы можете прикрепить вычисления к изменениям в URL. Я решил эту проблему и получил book чтобы выполнить изменения в URL-адресе следующим образом: https://github.com/ylluminarious/volt_action_problems/commit/5fcefc16d7b14a980f68ce572a80f25540d21636.

Метод book не вызывается дважды, потому что ваше представление уже настроено. Изменение в URL только вызывает реактивное обновление в вашем представлении.

Чего вы пытаетесь достичь?

Извините за задержку с ответом. Это известная проблема в моем списке исправлений. Как указано в GDP2, вы можете использовать.watch! чтобы справиться с этим, или, возможно, лучший способ сделать это - написать свои контроллеры более функциональным способом, чтобы данные, извлекаемые из параметров, использовались в методах вместо установки переменных экземпляра.

Так, например, если вы используете параметры в запросе, вместо того, чтобы делать что-то вроде:

attr_reader :query
def index
  @item = store.items.where(name: params._name).first
end

Вы могли бы сделать что-то вроде:

def query
  store.items.where(name: params._name).first
end

Это может показаться менее эффективным, но кеширование очень много, и это почти так же эффективно.

Как только я получу время, я заставлю его перезапустить метод действия при изменении данных. (Извините, просто не дошли до этого.)

Другие вопросы по тегам