Jquery-rails, :remote => true nie działa

Używam rails 3.0.8, jquery-rails 1.0.10.
Chciałem sprawdzić działanie mechanizmu jquery-rails.

Po utworzeniu nowego projektu, dopisuję do Gemfile’a:
gem ‘jquery-rails’

Wywołuję:
bundle install

Następnie
rails generate jquery:install
Pliki od prototype są usuwane i zastępowane nowymi.

Następnie tworzę proste rusztowanie:
rails generate scaffold Post name:string title:string content:text
rake db:migrate

W powstałym app/views/posts/_form.html.erb zamieniam:
<%= form_for(@post) do |f| %>
na
<%= form_for(@post, :remote => true) do |f| %>

Oto akcja create w kontrolerze posts_controller
def create
@post = Post.new(params[:post])

respond_to do |format|
  if @post.save
    format.html { redirect_to(@post, :notice => 'Post created.') }
    format.js
  else
    format.html { render :action => "new" }
    format.js
  end
end

end

Liczę, że po ustawieniu :remote => true dojdzie tutaj zapytanie w formacie js, ale w dalszym ciągu formatem jest html.
Mogę wymusić format js poprzez ustawienie:
<%= form_for(@post, :remote => true, :format => ‘js’) do |f| %>
Jednak kod pliku: app/views/create.js.erb nie jest wykonywany przez przeglądarkę, tylko w niej wyświetlany.

Gdzie popełniam błąd? O czymś zapomniałem?

Ale czy request idzie AJAXem do kontrolera, tzn strona się cała nie przeładowuje? Czy po zainstalowaniu jquery-rails i wygenerowaniu plików javascript, zrestartowałeś przeglądarkę? Czy jak pokażesz źródło, są tam dołączane pliki jquery.js, rails.js oraz application.js? Czy jak klikniesz na nie w źródle to się ładują?

3.0.8 ma pewne problemy z renderowaniem partiali html w pliku erb.js, jeśli masz zamiar używać tego podejścia to lepiej użyj 3.0.9.rc3. Na przykład:

$("#mydiv").html("<%= escape_javascript(render partial: "foo.html") %>")

w 3.0.8 daje dziwny rezultat, trzeba escape_javascript poprzedzić “raw”. Ale podejrzewam że jeszcze tu nie dotarłeś. W 3.0.7 i 3.0.9 jest normalnie.

W 3.0.8 helpery escape_javascript i escape_json są całkowicie zepsute - raw tutaj nie pomaga, wyświetli co prawda zawartość, ale zawartość ta będzie źle sparsowana.
W kolejnych wersjach 3.0.9.rc jest już to naprawione.

Potwierdzam. Trzeba się trzymać od 3.0.8 z daleka. Przykład : https://github.com/apotonick/apotomo/pull/25

Dlatego się 3.1 używa, a nie jakieś starocie. :slight_smile:

Update: