如何在rails中的ajax请求中呈现JSON?

时间:2016-06-05 04:21:29

标签: ruby-on-rails json ajax

我在我看来(sales.html.erb):

$('#Comprar').click(function(){    
        var table = tableToJson();    
        if (table.length == 0) 
          alert("No hay productos para comprar");
        else {
    // alert(JSON.stringify(table));
          $.ajax({
            url: "<%= products_sales_path %>",
            type: "GET",
            dataType: "json",
            data: JSON.stringify(table),
            complete: function() {
                    alert("Done!");
                  }        
            });
        }     
      });

tableToJson()是一个函数,它从已经格式化为JSON Image的表中返回某些信息。 products_sales_pathsales.html.erb的查看路线。但是,我不确定如何使用$.ajax()方法将JSON发送到rails服务器并进行渲染。我在我的控制器(products_controller.rb)中有这个:

def sales
    if request.xhr?    
      render :json => @product
    else
      @products = Product.all
      filter = params[:search]
      if filter.blank?
        @products = Product.all
      else
        @products=Product.where("lower(nombre) LIKE ? OR lower(presentacion) LIKE ?", "%#{params[:search].downcase}%", "%#{params[:search].downcase}%")
      end    
    end
  end

我认为render :json => @product可以做我需要的但它不起作用!我还没弄明白。谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

请检查此格式:

render :json => { :success => true,:product => @product.as_json() }

答案 1 :(得分:0)

您可以使用$.ajax$.get进行申请。

<强> JS:

$(document).ready(function() {
    $('#Comprar').click(function(){    
    var table = tableToJson();    
    if (table.length == 0){
      alert("No hay productos para comprar");
    } else {
      $.get("<%= products_sales_path %>", function( data ) {
        // alert("Done");
        console.log("Data: ", data);
      }, "json" );
    }
  });
})

<强>控制器:

def sales
    @products = Product.all
    if request.xhr?
      render status: 200, json: {
            products: @products
      }.to_json
    else
      @products = params[:search].blank? ? @products : Product.where("lower(nombre) LIKE ? OR lower(presentacion) LIKE ?", "%#{params[:search].downcase}%", "%#{params[:search].downcase}%")
    end
end