0

我有一个绑定到活动记录的模型类。

  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 回答