Pasar parámetros JSON para actualizar Rails Model

Estoy tratando de actualizar un modelo a través de JSON. En este momento puedo hacer que se ejecute el método put.

Desde la consola de mi navegador, veo esto, así que creí que mi solicitud se procesó.

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

Sin embargo, no estoy muy seguro de cómo podría hacer que Rails acepte los datos que quiero actualizar y agradecería si alguien pudiera ayudarme.

Estos son mis códigos Jquery para la solicitud de Ajax. dataToServer son los datos que quiero enviar para actualizar el modelo.

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)
  {
  }
});

En mi método de actualización en el controlador tengo los siguientes códigos.

  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

Y este es mi método as_json. Lo estoy usando para mi solicitud de envío del servidor al lado del cliente, pero no estoy muy seguro de poder usar el mismo método para enviar información del cliente al lado del servidor.

  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

Agradecería que alguien pudiera guiarme, ya que no estoy muy familiarizado con la forma en que debo hacer que Rails acepte los parámetros para actualizar el modelo.

preguntado el 31 de diciembre de 12 a las 16:12

1 Respuestas

Creo que primero debes analizar los parámetros JSON:

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

¿Cómo analizo JSON con Ruby on Rails?

contestado el 23 de mayo de 17 a las 13:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.