Przechodzę przez Poradnik Railsowy Michaela Hartla i uderzę w mały szkopuł w punkcie 12.2.5, gdzie powinniśmy stworzyć działający przycisk z Ajaxem. Wiem, że kod jest poprawny (skończyłem kopiowanie go bezpośrednio z książki i trzykrotne przepisanie) i jestem zielony. Ale tak naprawdę nie działa!Przycisk nie aktualizuje się w Ajax - Rails Tutorial 3 w §12.2.5
W tej części samouczka zmieniamy przycisk wysyłania formularza regularnego do pracy z Ajax tak, że cała strona nie "odświeża się" (naprawdę, przekierowanie na tę samą stronę), a zamiast tego tylko przycisk i odpowiedni aktualizacja elementu paska bocznego. Problem polega na tym, że przycisk nie ładuje się automatycznie po kliknięciu, ponieważ oczekuję. Odświeża się po odświeżeniu strony. Jeśli wyłączę JS w mojej przeglądarce, powróci - tak jak powinien - do wersji HTML, która wyzwala przekierowanie i "odświeża" całą stronę. Jeśli zastanawiasz się, spróbowałem odświeżyć stronę i wypróbowałem Firefoksa, Safari i Chrome oraz Chrome w trybie incognito. Zamknąłem i zrestartowałem serwer szyny, spork i autotest. I przepisałem cały kod, a następnie skopiowałem cały kod książki. Wciąż byłam zakłopotana.
Mimo że test jest zielony, mam niedoskonale działającą funkcję. Może jest coś, czego mi brakuje i możesz mi pomóc je znaleźć? Może brakuje mi klejnot związane javascreipt-Ajax, klejnot ...
odpowiednich części kodu:
relationships_controller.erb:
class RelationshipsController < ApplicationController
before_filter :authenticate
def create
@user = User.find(params[:relationship][:followed_id])
current_user.follow!(@user)
respond_to do |format|
format.html { redirect_to @user }
format.js
end
koniec
def destroy
@user = Relationship.find(params[:id]).followed
current_user.unfollow!(@user)
respond_to do |format|
format.html { redirect_to @user }
format.js
end
end
end
_follow.html.erb:
<% = form_for (current_user.relationships. kompilacja (: follow_id => @ user.id), : remote => true) do | f | %> <% = f.hidden_field: followed_id%>
<% = f.submit "Follow" %> <% end%>
_unfollow.html.erb:
<%= form_for(current_user.relationships.find_by_followed_id(@user),
:html => { :method => :delete },
:remote => true) do |f| %>
<% end%>
create.js.erb
$("follow_form").update("<%= escape_javascript(render('users/unfollow')) %>")
$("followers").update('<%= "#{@user.followers.count} followers" %>')
destroy.js.erb
$("follow_form").update("<%= escape_javascript(render('users/follow')) %>")
$("followers").update('<%= "#{@user.followers.count} followers" %>')
ja również upewnić się, że linia ta jest zawarta w application.html.erb
<%= javascript_include_tag :defaults %>
Jeśli jest coś jeszcze jest potrzebne do oceny sytuacji , proszę pytać, a ja odpowiem aktualizacją.
TIA
użyć narzędzia takiego jak Firebug (z firefox) lub narzędzi programistycznych dostarczanych z chromem, aby lepiej zrozumieć, co się dzieje. Na przykład, jeśli użyjesz chrome na komendzie mac-guit-opcji-i, aby wyświetlić narzędzia dla programistów. kliknij kartę "Konsola", a następnie spróbuj kliknąć, co uruchomi twój ajax. jeśli są błędy js, zobaczysz je tutaj. w przeszłości stwierdziłem, że moje żądania ajaxowe nie były poprawnie sformatowane, co powodowało błędy w js. szukałem problemów w szynach, ale problem był w samej odpowiedzi ajaxowej i przeglądarka go łapała, nie szyny (więc nie pojawiały się w moich dziennikach). – Dty
Humbledaisy, czy byłeś w stanie go rozwiązać? Mam tutaj ten sam problem - wynik zwrócony z Railsów (który potwierdziłem za pomocą sniffera http) nie wyzwala zmiany, ale jeśli wkleisz kod do debuggera, to działa. Jestem zdziwiony. – chesterbr