Запустить действие при переходе по ссылке на страницу с тем же действием (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
Это может показаться менее эффективным, но кеширование очень много, и это почти так же эффективно.
Как только я получу время, я заставлю его перезапустить метод действия при изменении данных. (Извините, просто не дошли до этого.)