使用Rails to_xml(:methods =>)选项需要将方法包装为cdata

时间:2010-06-19 16:45:54

标签: ruby-on-rails

我正在使用Rails 2.3.4和“to_xml”与:methods => option,我想要包含一个Base64编码的缩略图。

有什么方法可以指定该方法需要包装在cdata标签中吗?

示例:

  render :xml => @items.to_xml(
    :include => [:photos,:comments], 
    :methods => [:encoded_thumb]) { |xml| 
      xml.tag! 'total-entries', @items.total_entries 
      xml.tag! 'per-page', @items.per_page 
    }
  }

2 个答案:

答案 0 :(得分:2)

在Rails 3中,您可以使用Proc

encoded_thumb = Proc.new do |options, item|
  options[:builder].tag!('encoded_thumb') do
    options[:builder].cdata!(item.encoded_thumb)
  end
end

render :xml => @items.to_xml(
  :include => [:photos,:comments],
  :procs   => encoded_thumb
)
...

答案 1 :(得分:0)

一个简单的解决方法是:methods => [:encoded_thumb_cdata],并在模型中包装该方法。