activerecord json输出未显示输出中的关系

时间:2012-03-19 18:10:36

标签: ruby-on-rails

我有一个帖子模型,当然还有作者,这是与我的用户的外键关系。

我正在尝试输出JSON,带有作者姓名的帖子。 我知道这是rails 101,但我无法调用post.author,因为我不在视图中。

我尝试过这几种方法,但似乎都没有。

我的帖子模型有

 belongs_to :user, :foreign_key => :author_id

def post_author
 self.each {|a| a['author'] = User.find(a.id)}
end

在我的控制器中我尝试了各种各样的

posts=Post.find(:all).includes(:user)

#or
posts=Post.find(:all).includes(:post_author) #don't think this is right anyway, but tried 

#and 
posts = Post.find(:all)
posts = JSON::Parse(posts.to_json()).merge('author'=>posts.author) #or posts.user, etc etc

当然,这些都没有奏效,这就是我在这里发帖的原因。获取帖子作者的最佳方式是什么?

---------------------- update ------------------------ ---

@rjz提供了一个有效的回复,但我希望这不是最好的方法。 他建议使用

posts.to_json(:include=> :user,:only[:username])

这意味着我只回来了用户名,但我还需要更多用户名,所以我开始使用:except代替。这里的问题是我有一个像id这样的字段,我需要在帖子中,但不是在作者中,但如果我以这种方式排除它们,那么该字段将被完全排除在结果之外。我还必须列出我需要的每个领域,我不确定这是否是最好的方法。

1 个答案:

答案 0 :(得分:1)

您可能需要稍微取一下您的关联名称以获得您想要的内容,但是当您使用to_json序列化时,您要查找的是:include选项:

posts.to_json(:include => :user)