Rails Ajax调用:将JSON传递给单独的控制器方法

时间:2016-05-12 16:22:54

标签: ruby-on-rails json ajax shopify

嘿大家我在设置应用时遇到问题。它使用shopify API,基本上它所做的是通过视图获取一些数据并将其发送到控制器,但是我将问题传递给控制器​​中的另一个方法以使用API​​来保存数据。

这是我的代码:

控制器

class BuilderController < ShopifyApp::AuthenticatedController
  def index
    urlval = request.fullpath
    @urlCheck = urlval.split('/').last
  end
  def show
    url = request.fullpath
    @urlID = url.split('/').last
    @customers = ShopifyAPI::Customer.search(query: "id:"+ @urlID)
    #need to get a way to retrieve the ajax call info here to pass into    the update
  end
  def updateCustomer(notes)
      @customers.each do |cus|
      cus.note = notes
      cus.save()
      end
  end   
  def new
    notes = params[:notes]
    updateCustomer(notes)
    render json: notes
  end
end

查看

    <button id="test">TEST</button>

<script>
var butt = document.getElementById('test');
butt.addEventListener("click",function(){
   $.ajax({
   url: "/builder/new",
   type: "GET", 
   data: {
            "notes": [
                "test",
                "test2"
            ]
        },
   success: function(data,text,xhr) {
       console.log(text);
       console.log(xhr);
       console.log(data);
       alert('successfully');
     },
   error: function(data,error){
        console.log(data);
        console.log(error);
        alert("help");
     }
   });
});
</script>

2 个答案:

答案 0 :(得分:0)

而不是一个完全独立的方法,你有没有看过 respond_to方法? http://api.rubyonrails.org/classes/ActionController/MimeResponds.html#method-i-respond_to

你可以这样做(假设html是主要的请求类型,如果不是则改变):

def index
  respond_to do |format|
    format.html { actions }
    format.json { actions }
  end
end

这是我们用于在同一操作中容纳不同请求类型的方法。如果我误解了你的问题,请告诉我。

答案 1 :(得分:0)

你可以用这个

  

update_all(更新)公开   更新所有记录,并提供详细信息   它们匹配一组提供的条件,限制和顺序也可以   提供。此方法构造单个SQL UPDATE语句和   将其直接发送到数据库。它没有实例化   涉及的模型,它不会触发Active Record回调或   验证。   http://apidock.com/rails/v4.0.2/ActiveRecord/Relation/update_all

def new
 notes = params[:notes]
 @customer.update_all({note: notes})

 respond_to do |format|
   format.html {}
   format.json { json: @customer.json }
 end
end