10

我一直在尋找一段時間,但目前還找不到滿意的答案。我有兩個應用程序。 FrontApp和BackApp。 FrontApp在BackApp中有一個模擬模型的活動資源。所有模型級別的驗證都在BackApp中,我需要在FrontApp中處理BackApp驗證。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 

但是,由於密碼爲空,我需要將錯誤從BackApp傳回給FrontApp。這沒有發生。我只是不明白如何成功地做到這一點。這必須是一種常見的集成方案;但似乎沒有一個好的文檔呢?

我充當代理寧靜的控制器如下:

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,它不分配和返回活動資源應用程序 – 2014-05-20 07:37:00

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 2010-06-23 05:30:53

+0

接縫是您的代碼中唯一的錯誤。我認爲也許這個錯誤並沒有使模型完成錯誤。如果這沒有幫助,我很抱歉,但我不知道還有什麼要嘗試。 – robertokl 2010-06-23 17:58:36

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