传递JSON参数以更新Rails模型

时间:2012-12-31 16:06:42

标签: ruby-on-rails ruby-on-rails-3 json jquery

我正在尝试通过JSON更新模型。现在我能够执行put方法。

从我的浏览器控制台,我看到了这一点,所以我相信我的请求确实已经完成。

PUT http://localhost:3000/slot_allocations/1 [HTTP/1.1 200 OK  7ms]

但是,我不太确定如何让Rails接受我想要更新的数据,如果有人可以帮助我,我会很感激。

这是我的Ajax请求的Jquery代码。 dataToServer是我要发送以更新模型的数据。

var url = 'slot_allocations/'+alloc_id;
var dataToServer = {slot_allocation:{timeslot:timeslot, subject:subject,slot_allocation_id:alloc_id-1, group_id:"Group 2", lesson_type:"Tutorial"}}

$.ajax({
  type: "PUT",
  url: url, 
  dataType: "json",
  data:  JSON.stringify(dataToServer) , // message to send goes here
  success: function (data)
  {
  }
});

在我在控制器中的更新方法中,我有以下代码。

  def update
    @slot_allocation = SlotAllocation.find(params[:id])
    respond_to do |format|
      if @slot_allocation.update_attributes(params[:slot_allocation])
        format.html { redirect_to @slot_allocation, notice: 'Slot allocation was successfully updated.' }
        format.json { render :json=>@slot_allocation.as_json }
      else
        format.html { render action: "edit" }
        format.json { render json: @slot_allocation.errors, status: :unprocessable_entity }
        format.js  { render :js => @slot_allocation.errors, :status => :unprocessable_entity }
      end
    end
  end

这是我的as_json方法。我将它用于从服务器到客户端的发送请求,但我不太确定是否可以使用相同的方法将信息从客户端发送到服务器端。

  def as_json(options={}) 
  {
     :group_id =>self.group_index,
     :lesson_type =>self.lesson_type,
     :timeslot =>self.timeslot_id,
     :subject =>self.subject_id,
     :slot_allocation_id => self.slot_allocation_id
  }
  end

如果有人可以指导我,我会很感激,因为我不太熟悉如何让Rails接受更新模型的参数。

1 个答案:

答案 0 :(得分:0)

我认为你需要先解析JSON参数:

attributes = ActiveSupport::JSON.decode(params[:slot_allocation])
if @slot_allocation.update_attributes(attributes)
  ...
end

How do I parse JSON with Ruby on Rails?