0

Active レコードにバインドされていないモデル クラスがあります。

  class ProcessingStatus
    attr_accessor :status, :timestamp
  end

モデルは処理ステータス ホルダーとして機能し、最終的に呼び出し元のメソッドに返されます。

これはアクティブなリソース メソッドとして呼び出されるため、xml として戻す (シリアル化する) 必要があります。これが私のアクションメソッドです:

def activate
  @process_status = ProcessingStatus.new
  if Account.activate(params[:account])           
    @process_status.status = "success"
  else
    @process_status.status = "fail"
  end 
  respond_to do |format|
    format.html # index.html.erb
    format.xml  { render :xml => @process_status }
  end
end

ただし、これは有効なxmlを返していないようです。

@process_status以下のように出力しようとすると

return render :text => "The object is #{@process_status}"

これは私が得るものです:

オブジェクトは #<ProcessingStatus:0x00000005e98860> です。

私が欠けているものを教えてください。

編集#1、

以下のコメントに基づいて、シリアル化ライブラリを含めるようにコードを変更しました。

class ProcessingStatus 
  include ActiveModel::Serialization
  include ActiveModel::Serializers::JSON
  include ActiveModel::Serializers::Xml

  attr_accessor :status

  def attributes

    @attributes ||= {'status' => 'nil'}
  end
end

私は近づいています :) .xml リクエストに対して次のような出力が得られます。割り当てた値が反映されません。

@process_status.status = "success" / "fail"

<processing-status><status>nil</status></processing-status>

しかし、jsonリクエストを行うと、正しく表示されます!

{"processing_status":{"status":"success"}}
4

1 に答える 1

2

モデルでメソッドを定義するto_xmlか、以下のようにシリアル化モジュールを含める必要があります。

class ProcessingStatus
  include ActiveModel::Serialization

  attr_accessor :status, :timestamp
end

詳細については、http: //api.rubyonrails.org/classes/ActiveModel/Serialization.htmlを参照してください。

于 2011-07-25T12:27:36.573 に答える