自定义Rails XML呈现以包含额外的属性

时间:2010-06-11 00:05:18

标签: ruby-on-rails xml-serialization

假设我有一个这样的模型:

create_table :ninjas do |t|
  t.string name
end

Ninja课程有额外的属性:

class Ninja < ActiveRecord::Base
  def honorific
    "#{name}san"
  end
end

在我的控制器中,我只想将其呈现为XML:

def show
  render :xml => Ninja.find(params[:id])
end

敬意部分未呈现。这是有道理的,因为它只是一种方法,但有没有办法欺骗它?

我完全可以回答“你这样做完全错了。”我只想补充一点,我确实想要动态计算敬意,而不是像将它存储在数据库中那样。

1 个答案:

答案 0 :(得分:2)

您可以使用:methods参数to_xml进行此序列化。您可以直接在行动中调用它......

render xml: Ninja.find(params[:id]).to_xml(methods: :honorific)

...或重新定义to_xml课程中的Ninja以始终包含该内容。

请查看the docs了解详情。