ActiveRecord to_json指定包含方法的选项

时间:2012-10-16 17:05:21

标签: ruby ruby-on-rails-3 activerecord ruby-on-rails-3.2

在我看来,我有以下to_json: <%=raw @forums.to_json(:methods => [:topic_count, :last_post]) %>;

在模型中我有以下方法:

def last_post
    post = ForumPost.joins(:forum_topic).where(:forum_topics => {:forum_id => self.id}).order("forum_posts.created_at DESC").first
    return post
end

然而,ForumPost包含与ForumTopic(belongs_to :forum_topic)的关系,我想在我的json中包含这个ForumTopic,所以我最终得到{...,“last_post”:{...,“forum_topic” :{...} ...},...}。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:1)

通常最好在模型中保留这种声明。您可以覆盖模型中的as_json方法。这种方法允许您控制整个对象图的序列化行为,并且您可以为这些东西编写单元测试。

在这个例子中,我猜你的@forums变量引用了一个名为Forum的模型,如果我错了,希望你仍然能够理解。

class Forum
    ...
    def as_json(options={})
        super(methods: [:topic_count, :last_post])
    end
end
class ForumPost
    ...
    def as_json(options={})
        super(methods: [:forum_topic])
    end
end