尝试使用尽可能少的代码重复来镜像我的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
答案 0 :(得分:2)
to_xml
返回XML字符串,而不是哈希。这就是为什么它被括号中的符号感到惊讶:它认为你试图修改一个特定的角色,例如name[0] = 'A'
如果您对更改XML输出的位感兴趣,也许您应该只构建所需属性的新哈希值并在其上运行to_xml
。