在to_xml中包含ActiveRecord错误时抛出NoMethodError

时间:2010-10-27 14:23:55

标签: ruby-on-rails

我正在尝试从服务应用程序渲染xml。

在模型中,关系定义为:

class Customer < ActiveRecord::Base
    has_many :licenses
    accepts_nested_attributes_for :licenses
end

在我的控制器中,我有以下代码:

if @customer.save
    render :xml => @customer, :status => :created
else
    render :xml => @customer.to_xml(:include => [:errors, :licenses]), :status => :unprocessable_entity
end

但是这失败了NoMethodError:nil的未定义方法`macro':NilClass错误。

在控制台上,我可以简单地复制错误:

>params = {...}
>c = Customer.new(params)
>c.save
=> false
>c.errors
=> #<ActiveRecord::Errors::...
>c.to_xml(:include => :errors)
NoMethodError: undefined method `macro' for nil:NilClass
... Stack Trace ...
>c.errors.to_xml
=>XML Showing Errors

我知道我可以轻松地将错误呈现给xml:

render :xml => @customer.errors

但是,我真的希望能够同时返回错误和其他集合。也许有人可以解释为什么我会收到这个错误。

1 个答案:

答案 0 :(得分:3)

它不包括但是:您需要使用的方法

render :xml => @customer.to_xml(:include => [:licenses], :methods => [:errors]), :status => :unprocessable_entity