2012-12-31 52 views
0

我想通過JSON更新模型。現在我能夠獲得put方法來執行。傳遞JSON參數來更新Rails模型

從我的瀏覽器控制檯,我看到這個,所以我相信我的請求確實通過了。

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接受參數來更新模型。

回答

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?