【问题标题】:activerecord json output not showing relationship in outputactiverecord json输出未在输出中显示关系
【发布时间】:2012-04-04 06:05:39
【问题描述】:

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

我正在尝试以 JSON 格式输出带有作者姓名的帖子。 我知道这是 rails 101,但我不能打电话给post.author,因为我不在视野中。

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

我的帖子模型有

属于_to :user, :foreign_key => :author_id def post_author self.each {|a| a['作者'] = User.find(a.id)} 结尾

在我的控制器中,我尝试了各种方式

帖子=Post.find(:all).includes(:user) #要么 posts=Post.find(:all).includes(:post_author) #无论如何都不认为这是正确的,但尝试过 #和 帖子 = Post.find(:all) posts = JSON::Parse(posts.to_json()).merge('author'=>posts.author) #or posts.user 等

当然,这些都不起作用,这就是我在这里发帖的原因。获得帖子作者的最佳方法是什么。

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

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

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

这意味着我只能取回用户名,但我需要的还不止这些,所以我开始改用 :except。这里的问题是我在帖子中有一个像id 这样的字段,但在作者中没有,但是如果我以这种方式排除它们,则该字段将完全从结果中排除。我还必须列出我需要的每个字段,我不确定这是否是最好的方法。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    您可能需要稍微取笑您的关联名称才能得到您想要的,但是当您使用to_json 进行序列化时,您正在寻找的是:include 选项:

    posts.to_json(:include => :user)
    

    【讨论】:

    • 这让我获得了用户@rjz,但带来了现在返回所有内容的新问题,包括电子邮件等。我尝试了posts.to_json(:include => :user, :select => :username),但没有奏效。我可以在其中混合选择吗?
    • 不完全是,但您可以使用to_json 中的:only 选项来限制要序列化的字段。我在上面链接的文档中有详细说明。
    • 感谢 rjz,这是一个好的解决方案。我现在使用:except,但我必须删除或添加两个表的所有字段。我希望可能有更好的方法,我会更新这个问题。如果没有更好的回应,答案就是你的。再次感谢
    猜你喜欢
    • 2013-04-15
    • 2019-10-06
    • 2015-07-09
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多