Ruby on rails activerecord json输出未在输出中显示关系

Ruby on rails activerecord json输出未在输出中显示关系,ruby-on-rails,Ruby On Rails,我有一个posts模型,当然还有作者,这对我的用户来说是一个外键关系 我试图用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 属于:用户,:外键=>:autho

我有一个posts模型,当然还有作者,这对我的用户来说是一个外键关系

我试图用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 属于:用户,:外键=>:author\u id def post_作者 self.each{a|a['author']=User.find(a.id)} 结束 在我的控制器中,我尝试了各种

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 posts=Post.find(:all).includes(:user) #或 posts=Post.find(:all).includes(:Post_author)#无论如何,不要认为这是正确的,但是尝试过了 #及 posts=Post.find(:all) posts=JSON::Parse(posts.to_JSON()).merge('author'=>posts.author)#或posts.user等 当然,这些都不起作用,这就是我在这里发帖的原因。获得帖子作者的最佳方式是什么

----------------------更新---------------------------

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

posts.to_json(:include=> :user,:only[:username]) posts.to_json(:include=>:user,:only[:username])
这意味着我只想找回用户名,但我需要更多,所以我开始使用
:除了
。这里的问题是,我有一个类似
id
的字段,这是我在帖子中需要的,但在作者中不需要,但如果我以这种方式排除它们,该字段将完全从结果中排除。我还必须列出我需要的每个领域,我不确定这是否是最好的方法

您可能需要稍微梳理一下您的关联名称,以获得您想要的确切内容,但您要查找的是
:在序列化时包含
选项:


这让我得到了user@rjz,但带来了一个新问题,即现在返回所有内容,包括电子邮件等。我尝试了
posts.to_json(:include=>:user,:select=>:username)
,但没有成功。我可以将select与此混合使用吗?不完全可以,但是您可以使用
to_json
中的
:only
选项来限制哪些字段被序列化。这在我上面链接的文档中有详细说明。谢谢rjz,这是一个确定的解决方案。我现在使用的是
:除了
,但我必须删除或添加两个表的所有字段。我希望有更好的方法,我会更新这个问题。如果没有更好的回答,答案是你的。再次感谢
posts.to_json(:include => :user)