10

Я искал какое-то время, и пока я пока не могу найти удовлетворительный ответ. У меня есть два приложения. FrontApp и BackApp. FrontApp имеет активный ресурс, который имитирует модель в BackApp. Все проверки уровня модели живут в BackApp, и мне нужно обрабатывать эти проверки BackApp в FrontApp.Обработка ошибок ActiveResource

Я следующий код активного ресурса:

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 в передней приложения; Я звоню на него. например:

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 

Что это такое, что мне не хватает? Любая помощь будет высоко ценится.

Приветствия

ответ

13

С рельсами исходного кода я понял, что причина ActiveResource не получает ошибки, потому что я не назначая ошибки на «ошибку» теги в формате JSON. Это недокументировано, но требуется. :)

Так что мой код должен быть:

render :json => {:errors => user.errors}, :status => :unprocessable_entity 
+0

'format.json {render: json => {: errors => @ customer.errors},: status =>: unprocessable_entity}' ----> Это сработает ..... У меня также была такая же проблема, потому что Я использовал код, как @ customer.errors.full_messages, он не присваивает и не возвращает приложение активного ресурса –

1

В коде:

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]) 

Ваша модель активного ресурса передать Params, как выше хэш :

:user => { :username => "xpto", :password => "yst" } 
+0

Спасибо за подсказку, но будет ли это в любом случае способствовать решению проблемы, с которой я столкнулся? – Priyank

+0

Этот шов является единственной ошибкой в ​​вашем коде. Я подумал, что, может быть, эта ошибка не делает модель ошибкой. Если это не помогло, извините, но я не знаю, что еще попробовать. – robertokl

1

Это решение работает для меня: https://stackoverflow.com/a/10051362/311744

обновление действия:

def update 
    @user = User.find(params[:id]) 

    respond_to do |format| 
     if @user.update_attributes(params[:user]) 
     format.html { redirect_to @user, notice: 'User was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: 'edit' } 
     format.json { 

      render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Вызов контроллера:

@remote_user = RemoteUser.find(params[:id]) 
if (@remote_user.update_attributes(params[:remote_user])) 
    redirect_to([:admin, @remote_user], notice: 'Remote user was successfully updated.') 
else 
    flash[:error] = @remote_user.errors.full_messages 
    render action: 'edit' 
end 

 Смежные вопросы

  • Нет связанных вопросов^_^