Подтвердить что ты не робот

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
4b9b3361

Ответ 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