У меня в приложении два разных макета, один для запросов javascript (AJAX) и один для обычных запросов.
# application.html.haml for non-js requests (abbreviated)
!!!
%html
%head
%body
= yield
# and application.js.coffee for js requests
App.modal """<%= yield %>""" # creates a javascript modal
Любая ссылка с :remote => true
теоретически должна использовать макет javascript.Это работает в определенных случаях, но не работает в других.
Работает по этой ссылке:
%li= link_to "Login", new_user_session_path, remote: true
# log output:
Started GET "/users/sign_in?&authenticity_token=KwyFmzGgR7Rdx3dudJDvw8b5rngvVDrwfTpYLPIPjEI=" for 127.0.0.1 at 2012-01-27 03:29:41 -0500
Processing by Devise::SessionsController#new as JS
Parameters: {"authenticity_token"=>"KwyFmzGgR7Rdx3dudJDvw8b5rngvVDrwfTpYLPIPjEI="}
Rendered devise/shared/_links.erb (0.9ms)
Rendered devise/sessions/new.html.haml within layouts/application (6.3ms)
Completed 200 OK in 167ms (Views: 165.9ms | ActiveRecord: 0.0ms)
# output in the javascript console:
XHR finished loading: "http://localhost:3000/users/sign_in?&authenticity_token=KwyFmzGgR7Rdx3dudJDvw8b5rngvVDrwfTpYLPIPjEI=".
Но не работает для этой:
%li= link_to "Account", edit_user_registration_path, remote: true
# log output:
Started GET "/users/edit?&authenticity_token=KwyFmzGgR7Rdx3dudJDvw8b5rngvVDrwfTpYLPIPjEI=" for 127.0.0.1 at 2012-01-27 03:31:24 -0500
Processing by Devise::RegistrationsController#edit as JS
Parameters: {"authenticity_token"=>"KwyFmzGgR7Rdx3dudJDvw8b5rngvVDrwfTpYLPIPjEI="}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
MobilePhone Load (0.3ms) SELECT "mobile_phones".* FROM "mobile_phones" WHERE "mobile_phones"."user_id" = 1 LIMIT 1
Rendered devise/registrations/edit.html.haml within layouts/application (6.7ms)
Completed 200 OK in 157ms (Views: 154.4ms | ActiveRecord: 0.6ms)
# output in the javascript console:
XHR finished loading: "http://localhost:3000/users/edit?&authenticity_token=KwyFmzGgR7Rdx3dudJDvw8b5rngvVDrwfTpYLPIPjEI=".
После некоторой простой отладки я понял, что второй запрос набирает application.html.haml
(неверно!), А первый - application.js.coffee
(правильно!).Оба успешно обрабатываются ajax.
Я немного озадачен здесь.Я надеюсь, что совершаю простую ошибку, которую кто-то сможет указать!
Спасибо!
PS Я использую рельсы 3.2.1 (и ранее пробовал на 3.1.3 ста же проблема)
РЕДАКТИРОВАТЬ: Не уверен, если это что-то меняет, но я использую драйвер mootools-rails: https://github.com/kevinvaldek/mootools-ujs/blob/master/Source/rails.js. Для заголовка accept правильно установлено значение text / javascript.1025 *