Rails to_xml vs as_json

时间:2011-10-21 04:22:00

标签: ruby-on-rails ruby ruby-on-rails-3 json

尝试使用尽可能少的代码重复来镜像我的API响应,并且到目前为止......

真的,这是一个“必须有一个更好的'Rails方式'来实现这个......”问题。

class Quote < ActiveRecord::Base
    belongs_to :author
    has_many :votes

    def as_json(options={})
        hash = super(except)
        hash[:author] = self.author.name
        hash[:vote_count] = self.votes.count
        hash
    end

    def to_xml(options={})
        hash = super(except)
        hash[:author] = self.author.name // <---- line 14
        hash[:vote_count] = self.votes.count
        hash
    end

    private

    def except
        { :except => [ :id, :created_at, :updated_at, :author_id ] }
    end

end

JSON响应就像一个冠军,但xml会抛出此错误

  

无法将符号转换为整数

app/models/quote.rb:14:in `[]='
app/models/quote.rb:14:in `to_xml'

作为次要问题,是否像我一样自定义输出?如果我可以避免,我想不要复制这个逻辑。

    hash[:author] = self.author.name
    hash[:vote_count] = self.votes.count
    hash

1 个答案:

答案 0 :(得分:2)

to_xml返回XML字符串,而不是哈希。这就是为什么它被括号中的符号感到惊讶:它认为你试图修改一个特定的角色,例如name[0] = 'A'

如果您对更改XML输出的位感兴趣,也许您应该只构建所需属性的新哈希值并在其上运行to_xml