2011-08-30 34 views
14

Mi configuración: Carriles 3.0.9, Ruby 1.9.2, 1.6.2 jQueryjQuery posterior a los carriles

tengo un formulario que muestra varias fotos y comentarios para un usuario y deseo de aplicar en línea comentar.

<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> 

Deseo someter un puesto de AJAX en el usuario pulsa la tecla Intro en el campo área de texto. Aquí está el código JavaScript (incompleta) que tengo hasta ahora

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

estoy usando el método delegate porque <div id='newsfeed'> contenidos podrían sustituirse con otra llamada AJAX. Lo que necesito es la sintaxis para el método jQuery post suponiendo que necesito pasar algunos params de forma como decir photo_id, etc. Suponer que tengo una forma de acceder a los valores para los params, ¿cuál es la sintaxis de la llamada post para crear params el camino carriles de esperar que

he aquí los raíles estándar bits de

sub_comments_controller.rb 

    def new 
    @sub_comment = SubComment.new 

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

también que no quieren utilizar el habitual <%= form_for(@sub_comment, :remote => true) do |f| %> para todos y cada comentario en línea que podría añadir. También he echado un vistazo a railscast de Ryan Bates, pero el código parece obsoleto.

Respuesta

29

Puede configurar su publicación para estructurar los datos de cualquier manera, siempre que se interprete correctamente en el extremo del riel, pero la mejor práctica es tener un objeto de 'nombre-modelo' con todos los valores.

Javascript

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

rieles

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

¿le importaría explicar por qué decidió no utilizar un bloque 'respond_to' por favor? ¡gracias! –

+0

realmente útil, me salvaste el tiempo, @ cmpolis, muchas gracias –

+2

@MarioZigliotto Lo hizo solo porque es más corto de escribir. Las consecuencias son que no puede procesar html en esta acción, solo json. – DonPaulie

Cuestiones relacionadas