2011-08-30 12 views
14

mojej konfiguracji: Szyny 3.0.9 Ruby 1.9.2, jQuery 1.6.2jQuery Post Szyny

Mam formularz, który pokazuje wiele zdjęć i komentarzy dla użytkownika i pragnę realizować inline komentowania.

<div id="newsfeed">  
<div> 
<div class="photo_title">Summer 2011</div> 
<div class="newsfeed_photo"> 
<a href="..." /></a> 
</div> 
<textarea class="comment_box">Write a comment...</textarea> 
</div> 
<div> 
<div class="comment_title">Seeing a movie</div> 
<textarea class="comment_box">Write a comment...</textarea> 
</div> 

Chcę przesłać stanowisko AJAX po naciśnięciu klawisza Enter w polu tekstowym. Oto javascript (niekompletny), że mam tak daleko

$('#newsfeed').delegate('.comment_box', 'keydown', function (event){ 
    event.preventDefault(); 
    $.post('/sub_comments', ...); 
    }); 

Używam metody delegate<div id='newsfeed'> ponieważ zawartość może być zastąpiony innym wywołania AJAX. Potrzebuję składni dla metody jQuery post przy założeniu, że muszę przekazać pewne parametry formularza, jak np. photo_id itd. Załóżmy, że mam sposób dostępu do wartości dla params, jaka jest składnia wywołania post tworzenia params way szyny oczekiwać im

Oto standardowe szyny bity

sub_comments_controller.rb 

    def new 
    @sub_comment = SubComment.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.js 
    end 
    end 

również nie chcę użyć zwykłej <%= form_for(@sub_comment, :remote => true) do |f| %> dla każdego komentarza inline mógłbym dodać. Spojrzałem też na numer Ryana Batesa railscast, ale kod wygląda na przestarzały.

Odpowiedz

29

Możesz skonfigurować swój post, aby uporządkować dane w jakikolwiek sposób, o ile jest on poprawnie interpretowany na końcu szyny, ale najlepszą praktyką jest posiadanie obiektu 'model-name' z wszystkimi wartościami.

Javascript

$.ajax({ 
    url: "/sub_comments", 
    type: "POST", 
    data: {subcomment: { 
      field: val, 
      field2: val, etc... }}, 
    success: function(resp){ } 
}); 

Szyny

def create 
    @sub_comment = SubComment.new params['subcomment'] 
    if @sub_comment.save 
    render :json => { } # send back any data if necessary 
    else 
    render :json => { }, :status => 500 
    end 
end 
+1

zechciałby pan wyjaśnić, dlaczego zdecydowałeś się nie używać 'respond_to' blok proszę? Dziękuję Ci! –

+0

Bardzo pomocny, zaoszczędziłeś mój czas, @ cmpolis, bardzo dziękuję –

+2

@MarioZigliotto Zrobił to tylko dlatego, że jest krótszy do napisania. Konsekwencją jest to, że nie może renderować html w tym działaniu, tylko json. – DonPaulie