【问题标题】:Simple join between two tables in RailsRails 中两个表之间的简单连接
【发布时间】:2013-05-05 03:14:46
【问题描述】:

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

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

我试过了:

Comment.includes(:user)

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

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

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

【问题讨论】:

  • 您是否试图找到“拥有”每条评论的user
  • 是的。但是,我想将两者都作为一个对象返回。喜欢:{comment.id:1,comment.text:随便,comment.user:{user.id:1,user.firstname:约翰......}}
  • 能把 User 和 Comment 的模型关系贴出来吗?
  • 用户有多个cmet,评论属于用户?

标签: ruby-on-rails json api grape


【解决方案1】:

如果你的 Comment belongs_to User 并且你的 User 有很多 cmets

你可以使用这个查询:

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

【讨论】:

    【解决方案2】:

    您可以使用 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的解决方案——那里有很多)。它会给你更好的控制...

    【讨论】:

    • 我知道我很久以前就接受了这个答案;实际上超过3年前。但想再次感谢你:)
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2021-11-18
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      相关资源
      最近更新 更多