0

我正在构建一个 Rails 应用程序作为 API 的后端。(使用葡萄 API)我有两个表(用户,评论),其中一个用户有很多评论,一个评论属于一个用户。

我正在尝试返回所有评论,并且在 Comment 对象中,我想为创建该评论的用户显示 User 对象。

我试过了:

Comment.includes(:user)

Comment.joins(:user).includes(:user)

他们都没有设法返回子对象。仅返回 Comment 对象(具有 user_id)属性)。

有没有办法以 JSON 格式实现这一点(如前所述,我使用 GRAPE)

4

3 回答 3

2

如果您的 Comment belongs_to User 并且您的 User 有很多评论

你可以使用这个查询:

Comment.find(:all, :joins => :user)
于 2013-05-07T05:15:29.117 回答
1

您可以使用 to_json 或 as_json 与 :include 选项。在您的 API 中:

resources :comments
  get :id do
    Comment.includes(:user).find(params[:id]).to_json(include: :user)
  end
end

但是,迟早您可能需要对 API 生成的 json 响应进行更多控制。我建议您看一下grave-rabl gem(或其他构建json的解决方案-那里有很多)。它会给你更好的控制...

于 2013-05-13T12:12:11.880 回答
0

User.all.select('*').joins(:comments) 需要select方法返回所有字段。我也会练习从父表开始。

于 2014-10-15T18:16:10.027 回答