Rails link_to с remote: true обработка html вместо js после обновления страницы
У меня есть страница поиска в моем приложении, где есть форма поиска ajax. Форма поиска работает правильно, передавая параметры модели для фильтрации поиска, а модель возвращает коллекцию результатов. При поиске, на странице отображаются результаты @results. Каждый @result затем имеет ссылку на действие на нем, например:
<%=link_to "Message", message_user_path(:id => user.id), :remote => true%>
Если это действие в контроллере:
respond_to :js, :html
def message
@user_id = params[:id]
@user = User.find_by_id(@user_id)
respond_to do |format|
format.html
format.js
end
end
и это отвечает сообщением message.js.erb, которое запускает панель сообщений, чтобы вывести сообщение пользователю. Все это работает правильно, проверяя журнал, я вижу, что отправлен правильный запрос на получение, и обрабатываемый правильный формат:
Started GET "/users/3/message"
Processing by UsersController#message as JS
Однако, если я обновляю страницу и пытаюсь щелкнуть ту же самую ссылку, которая работала до этого, я получаю сообщение об ошибке "Шаблон отсутствует". Проверяя журнал, я вижу, что теперь отправлено два запроса, сначала html, затем тот же самый запрос js.
Started GET "/users/4/message"
Processing by StudentsController#message as HTML
...
Completed 406 Not Acceptable in 3ms (ActiveRecord: 1.0ms)
Started GET "/users/4/message"
Processing by StudentsController#message as JS
В запросе html возникает ошибка шаблона. Кто-нибудь знает, почему обновление страницы приводит к тому, что рельсы пытаются ответить html-запросом на удаленную ссылку?
EDIT: routes.rb
resources :students do
member do
get 'message'
end
end
Ответы
Ответ 1
В вашем app/assets/javascripts/application.js
содержится
//= require jquery
//= require jquery_ujs
?
И ваш erb содержит <%= javascript_include_tag "application" %>
?
Я просто боролся с такой проблемой, как HOURS, и последняя из этих двух точек зафиксировала это; Я увидел первый пункт, упомянутый в некоторых других вопросах, поэтому я повторю его здесь.
Надеюсь, что это поможет.
(Кредит, причитающийся кредит)
Ответ 2
Какой решатель для меня добавлял: format = > "js"
Итак, в вашем случае:
<%=link_to "Message", message_user_path(:id => user.id, :format => "js"), :remote => true %>
Ответ 3
В общем случае, когда вы используете link_to
на определенной кнопке или так, когда вы нажимаете кнопку, запрос as js
отправляется на контроллер, но также выполняет поиск соответствующего файла .js.erb и т.д.
Ответ 4
Мое решение было заменить
format.json do
с
format.js do