Ajax na Rails3

Cześć,
Uczę sie pisać blog wg znanego wszystkim tutoriala “Stworzenie bloga w 15 minut”. Niestety nie mogę dodać Ajaxa przy dodawaniu komentarzy

[code=ruby]#########post/show.haml
= render :partial => @post.comments
.form_new_comment

  • form_for [@post, Comment.new], :remote => true do |f|
    %p
    = f.label :body, “Nowy Komentarz”
    %br
    = f.text_area :body
    %p
    = f.submit “Dodaj Komentarz”

#########
class CommentsController < ApplicationController
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create!(params[:comment])
respond_to do |format|
format.html { redirect_to @post }
format.js
end
end

#########create.js.rjs
page.insert_html :bottom, :comments, :partial => @comment
page[@comment].visual_effect :highlight
page[:new_comment].reset[/code]
Komentarze zostają dodane i wyświetlają się dopiero po odświeżeniu strony, nie wyświetlają się żadne błedy. Jakieś propozycje?

Odpal Firebuga (albo inne narzędzie w innych przeglądarkach niż FF) i podejrzyj co się dzieje.
Bardzo popularnym błędem jest podłączanie biblioteki jquery i wykorzystywanie funkcji stworzonych dla prototype. Sprawdź czy masz podlinkowane odpowiednie biblioteki js :slight_smile:

<script src="/javascripts/prototype.js?1301493822" type="text/javascript"></script> <script src="/javascripts/effects.js?1301493822" type="text/javascript"></script> <script src="/javascripts/dragdrop.js?1301493822" type="text/javascript"></script> <script src="/javascripts/controls.js?1301493822" type="text/javascript"></script> <script src="/javascripts/rails.js?1301493822" type="text/javascript"></script> <script src="/javascripts/application.js?1301493822" type="text/javascript"></script>
To moje biblioteki.

FIREBUG
$continue Error: “throw $continue” is deprecated, use “return” instead
[Wstrzymuj na tym błędzie]
category"js"
context Object { window=, browser=, more…}
href “http://0.0.0.0:3000/jav...prototype.js?1301493822
lineNo 0
message "Error: “throw $continue…d, use “return” instead”
msgId undefined
source “”
trace undefined

Nie mam pewnosci dlaczego przekazujesz tutaj obiekt active record. Wg mnie w pierwszej linijce powinna byc nazwa partiala:

 page.insert_html :bottom, :comments, :partial => "comments" # pow warunkiem ze masz partial "_comments"

Jeżeli to Ci zadziała to dopiero dodaj highlight i ten reset

Mam partial _comennts i zmieniłem jak napisałeś -> niestety nadal skrypt nie działa i dodaje komentarz dopiero po odświezeniu strony
Nie wiem jak zabardzo za pomocą FIREBUGA znaleźć ten błąd

a masz w widoku gdzie te komentarze mają być wyświetlane Twoim ajaxem ?

 <div id="comments"></div>

Patrzyłem własnie na:
http://apidock.com/rails/ActionView/Helpers/PrototypeHelper/JavaScriptGenerator/GeneratorMethods/insert_html
i najbezpieczniej będzie:

 page.insert_html :bottom, "comments", :partial => "comments"
 Mam partial _comennts
  • literowka?

http://ekorozwoj.heroku.com

[code]



Napisano 5 minutes temu

s

[/code] sory mam partial _comment.html.erb

Nie widze w ogóle który formularz w tej aplikacji jest ajaxowy i ma :remote => true
Poczytaj:
http://asciicasts.com/episodes/205-unobtrusive-javascript
Do tego poczytaj czy wolisz używać prototype czy jquery ( do rails 3 + jquery pojawil sie ostatnio spory wysyp tutoriali)

https://github.com/regedarek/ekosass
Teraz wstawiam niedziałajaca wersje na heroku => http://ekorozwoj.heroku.com/
Czy może to mieć jakiś związek z tym, że używam hamla i te partial napisałem bez niego tzn html.erb?
Wydaje mi się, że to coś z tymi divami

ZNALAZŁEM ROZWIĄZANIE =>
Używając HAMLa trzeba dodać w comments_controller

      format.js {render :layout=>false}