Получить параметры из Rails ответа ajax - PullRequest
2 голосов
/ 14 января 2012

Я создал новое действие в контроллере "contrib", как это

def newitem
    @Item = Item.new(:description => params[:description], :type_id => params[:type])
    if @Item.save
     #Magic supposed to happen here
   end
  end

Итак, в этом действии я создаю новый «Предмет», и я хочу получить идентификатор из созданного предмета в ответе AJAX, чтобы я мог использовать его в том же виде, в котором создан «предмет». ..

1-й вопрос, как мне отправить обратно из контроллера параметры созданного элемента? Во-вторых, я знаю, как обрабатывать Ajax-запросы, но как мне обрабатывать Ajax-ответ на первый запрос ...

Возможно, я слишком обдумываю решение, но просто не могу понять, как это сделать. Заранее спасибо.

1 Ответ

1 голос
/ 14 января 2012

Есть несколько способов справиться с этим. Подходы, описанные ниже, относятся к Rails 3.1

Вызовите рендер непосредственно в вашем методе (этот подход полезен только для подхода JSON API. Так как рендеринг html будет несуществующим):

def newItem
    @Item = Item.create(:description => params[:description], :type_id => params[:type])
    render json: @Item
end

Использовать блок response_do:

def newItem
  @Item = Item.create(:description => params[:description], :type_id => params[:type])

    respond_to do |format|
    if @Item.save
      format.html { redirect_to @Item, notice: 'Item was successfully created.' }
      format.json { render json: @Item, status: :created, location: @Item 
    else
      format.html { render action: "new" }
      format.json { render json: @Item.errors, status: :unprocessable_entity }
    end
  end
end

Обучите свой контроллер желаемым форматам ответов:

class ContributionsController < ApplicationController
  # Set response format json
  respond_to :json

  ...

  def newItem
    @Item = Item.create(:description => params[:description], :type_id => params[:type])
    respond_with @Item  #=> /views/contributions/new_item.json.erb
  end

Возможна "гоча" ...

Если у вас возникнут ошибки проверки при создании элемента, вы не получите идентификатор обратно и не сообщите об ошибке (кроме кода ответа http)

Добавьте следующее к вашей модели. Он будет включать ошибки проверки в хэш ошибок в ответе json

 class Item < ActiveRecord::Base

   ...

   # includes any validation errors in serializable responses 
   def serializable_hash( options = {} ) 
     options = { :methods => [:errors] }.merge( options ||= {} )
     super options
   end

Всегда есть несколько способов снять кожу с кошки. Я надеюсь, что это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...