11

しばらく探していましたが、まだ満足のいく答えが見つかりません。私は2つのアプリを持っています。FrontAppとBackApp。FrontAppには、BackAppのモデルを模倣するアクティブなリソースがあります。すべてのモデルレベルの検証はBackAppにあり、FrontAppでそれらのBackApp検証を処理する必要があります。

私は次のアクティブリソースコードを持っています:

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

ただし、パスワードが空白であるため、BackAppからFrontAppにエラーを返す必要があります。これは起こっていません。私はそれをうまく行う方法を理解していません。これは一般的な統合シナリオである必要があります。しかし、それについての良いドキュメントはないようですか?

プロキシとして機能するRESTfulコントローラーは次のとおりです。

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

私が行方不明になっているのは何ですか?どんな助けでも大歓迎です。

乾杯

4

3 に答える 3

13

Railsのソースコードから、ActiveResourceがエラーを受け取らなかった理由は、jsonの「errors」タグにエラーを割り当てていなかったためであることがわかりました。文書化されていませんが、必須です。:)

したがって、私のコードは次のようになっているはずです。

render :json => {:errors => user.errors}, :status => :unprocessable_entity
于 2010-07-11T18:30:55.743 に答える
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])

アクティブリソースモデルは、上記のハッシュのようなパラメータを渡します。

:user => { :username => "xpto", :password => "yst" }
于 2010-06-22T15:41:45.980 に答える
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
于 2014-02-05T10:32:11.350 に答える