Я использую Inherited Resources для моего приложения веб-сервиса Rails 2.3.Это отличная библиотека, которая входит в состав Rails 3.
Я пытаюсь найти наилучший способ вывода результата.
class Api::ItemsController < InheritedResources::Base
respond_to :xml, :json
def create
@error = nil
@error = not_authorized if !@user
@error = not_enough_data("item") if params[:item].nil?
@item = Item.new(params[:item])
@item.user_id = @user.id
if !@item.save
@error = validation_error(@item.errors)
end
if !@error.nil?
respond_with(@error)
else
respond_with(@swarm)
end
end
end
Хорошо работает, когда запрос успешен.Однако, когда есть какая-либо ошибка, я получаю ошибку «Шаблон отсутствует».@error - это, по сути, хэш сообщения и статуса, например {:message => "Not authorized", :status => 401}
.Кажется, respond_with
вызывает только to_xml
или to_json
с конкретной моделью, с которой связан контроллер.
Какой элегантный способ справиться с этим?Я хочу избежать создания файла шаблона для каждого действия и каждого формата (в данном случае create.xml.erb и create.json.erb)
В основном я хочу:
/create.json [POST] => {"name": "my name", "id":1} # when successful
/create.json [POST] => {"message" => "Not authorized", "status" => 401} # when not authorized
Спасибозаблаговременно.