2013-05-05 71 views
0

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

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

我想:

Comment.includes(:user) 

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

而且他们没有设法返回子对象。只返回Comment对象(具有user_id)属性)。

有没有办法实现,在一个JSON格式(如提到的,我用葡萄)

+0

你在试图找到“拥有”每个评论的用户吗? – abhir 2013-05-05 03:42:33

+0

是的。但是,我想将它们作为一个对象返回。像:{comment.id:1,comment.text:whatever,comment.user:{user.id:1,user.firstname:john .......}} – alybadawy 2013-05-05 12:24:30

+0

您可以发布User和Model的关系评论? – abhir 2013-05-07 02:09:35

回答

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响应。我建议你看看grape-rabl gem(或其他一些解决方案,用于构建json--其中有很多)。它会给你更精细的控制...

+0

我知道很久以前我接受了这个答案;实际上在3年前。但想再次感谢你:) – alybadawy 2016-08-05 15:37:47

2

如果您的评论belongs_to的用户和您的用户有很多评论

您可以使用此查询:

Comment.find(:all, :joins => :user) 
0

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