Есть несколько способов справиться с этим. Подходы, описанные ниже, относятся к 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
Всегда есть несколько способов снять кожу с кошки. Я надеюсь, что это поможет