Я искал некоторое время, и все же я не могу найти удовлетворительный ответ пока еще. У меня есть два приложения. FrontApp и BackApp. FrontApp имеет активный ресурс, который подражает модели в BackApp. Все образцовые проверки уровня живут в BackApp, и я должен обработать те проверки BackApp в FrontApp.
У меня есть следующий код активного ресурса:
class RemoteUser < ActiveResource::Base
self.site = SITE
self.format = :json
self.element_name = "user"
end
Это подражает модели, которая является следующие
class User < ActiveRecord::Base
attr_accessor :username, :password
validates_presence_of :username
validates_presence_of :password
end
Каждый раз, когда я создаю новый RemoteUser в переднем приложении; я называю .save на нем. например:
user = RemoteSession.new(:username => "user", :password => "")
user.save
Однако, так как пароль является пробелом, я должен пасовать назад ошибки к FrontApp от BackApp. Этого не происходит. Я просто не понимаю, как сделать это успешно. Это должно быть общим сценарием интеграции; но, кажется, нет хорошей документации для него?
Мой успокоительный контроллер, который действует как прокси, следующие:
class UsersController < ActionController::Base
def create
respond_to do |format|
format.json do
user = User.new(:username => params[:username], :password => params[:password])
if user.save
render :json => user
else
render :json => user.errors, :status => :unprocessable_entity
end
end
end
end
end
Что я пропускаю? Любая справка будет очень цениться.
Удачи
Из исходного кода rails я понял, что причина, по которой ActiveResource не работает. «Не получить ошибок» было связано с тем, что я не назначал ошибки тегу «errors» в json. Это недокументировано, но необходимо. :)
Итак, мой код должен был быть:
render :json => {:errors => user.errors}, :status => :unprocessable_entity
В коде:
class UsersController < ActionController::Base
def create
respond_to do |format|
format.json do
user = User.new(:username => params[:username], :password => params[:password])
if user.save
render :json => user
else
render :json => user.errors, :status => :unprocessable_entity
end
end
end
end
end
попробуйте заменить
user = User.new(:username => params[:username], :password => params[:password])
на
user = User.new(params[:user])
. Ваша модель активного ресурса передает параметры, подобные хешу выше:
:user => { :username => "xpto", :password => "yst" }