Rails 3 Link_to: удаленный не запускает RJS - PullRequest
2 голосов
/ 29 декабря 2010

Я работаю над настройкой действия AJAX в rails 3 с помощью следующего кода. Кажется, что AJAX-часть кода работает, но не запрашивает правильный файл, и мой response_to обслуживает его в обычном HTML.

Маршрутная информация:

resources :zones do
  resources :records
end

Контроллер:

def new
  @zone = Zone.new
  respond_to do |format|
    format.html
    format.js
  end
end

Ссылка в представлении (хамл):

= link_to 'Add a zone →', new_zone_path, :remote=>true

Сгенерированный HTML из link_to (также обратите внимание на неудачный рендеринг html-сущности ... но это еще одна проблема):

<a href="/zones/new" data-remote="true">Add a zone &amp;#8594;</a> 

Для ударов, список каталогов вида / зоны. Я не уверен, что делаю это совершенно правильно, поэтому у меня есть и new.js.rjs, и new.rjs. Они оба имеют одинаковое содержание, но никогда не попадают в действие.

|   `~zones/
|     |-_form.html.haml
|     |-_record.html.haml
|     |-edit.html.haml
|     |-index.html.haml
|     |-new.html.haml
|     |-new.js.rjs
|     |-new.rjs
|     `-show.html.haml

Наконец, журнал сервера, когда я нажимаю на ссылку:

Started GET "/zones/new" for 127.0.0.1 at Wed Dec 29 00:04:03 -0700 2010
  Processing by ZonesController#new as */*
  User Load (0.4ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 1) LIMIT 1
Rendered zones/_form.html.haml (22.1ms)
Rendered zones/new.html.haml within layouts/application (34.9ms)
Completed 200 OK in 80ms (Views: 42.0ms | ActiveRecord: 0.4ms)

Как видите, это рендеринг файла .html для запроса. Теперь для тестирования я попал на страницу http://localhost:3000/zones/new.js напрямую. И это обслуживает new.js.rjs. Также работает удаленный вызов javascript. Firebug показывает запрос и ответ, но запрашивает не ту страницу.

Также для тестирования я сделал это:

= link_to "Add a zone", '/zones/new.js', :remote=>true

Что прекрасно работает (rjs загружается, выполняется и работает правильно) для javascript, но не имеет приятного переключения при отказе для систем с отключенным javascript.

Для чего стоит я использую jquery.

Мне кажется, что я что-то упускаю в маршрутизации или синтаксисе ссылок, но все примеры, которые я могу найти в Интернете и в документации, похоже, показывают, что именно я делаю. В чем подвох?

Спасибо.

Ответы [ 2 ]

6 голосов
/ 29 июля 2014

Эта проблема также может быть решена с помощью этого синтаксиса (включая объявление data-type)

= link_to 'Add a zone &#8594;', new_zone_path, remote: true, "data-type" => "script"

Если у вас просто есть файл .js.erb, файл .html для рендеринга не требуетсяприсвойте data-type запроса (Rails автоматически обнаружит, что JS единственный способ ответа)

основная точка здесь вы должны убедиться, что Ваш запрос считается выполненным как JS .Это означает, что ваш запрос в консоли должен выглядеть так:

Started ...
Processing by ABCController#method as JS
6 голосов
/ 29 декабря 2010

Вы должны явно указать Rails, что вам нужен формат js:

= link_to 'Add a zone &#8594;', new_zone_path(:format => :js), :remote=>true

В качестве объяснения: вы должны указать расширение .js, потому что Rails не различает.Во многих случаях вам может потребоваться получить html или json с помощью Ajax, а не только javascript.Rails позволит вам получать любой контент в любом формате, поэтому вы должны указать его.

...