1

我正在尝试通过 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 接受参数来更新模型。

4

1 回答 1

0

我相信你需要先解析 JSON 参数:

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

如何使用 Ruby on Rails 解析 JSON?

于 2012-12-31T16:51:16.453 回答