active_record return 所有匹配记录对象的单个关联记录

active_record return single associated record for all matching record objects

我正在尝试找到一种方法来查询我的数据库,以 return 为所有匹配记录的每条关联记录。例如:

如果一个用户有很多房子,(一个房子属于一个用户),我需要得到所有的用户,每个用户都有一个关联的房子(比如第一间房子)。我该怎么做?

详细说明:

user A has houses 1, 2, 3
user B has houses 4, 5, 6
user C has houses 7, 8, 9

但是,如果我想获取所有用户,并且每个用户都有一个房子,格式为:

user   |   house
-----------------
A      |   1
B      |   4
C      |   7

我该怎么做?

数据库是postgres。

更新:

我的真实模型如下:

class Product < ActiveRecord::Base

  ...

  has_many :product_pictures, :dependent => :destroy
  accepts_nested_attributes_for :product_pictures, allow_destroy: true
end
result = User.joins(:houses).select("users.*, SOMEFUNCTION(houses.id) AS house_id").group(:id)

# you can access single house id like
result.first.house_id

您可以选择SOMEFUNCTION您想要select的房屋ID。

如果你使用 postgresql,

User.joins(:houses).select("users.*, (array_agg(houses.id))[1] AS house_id").group(:id)

添加与用户的关系:

class User < ActiveRecord::Base
  # Your current code
  has_one :house, -> { where('houses.id IN (SELECT min(id) FROM houses GROUP BY user_id)')}
end

那么,您的查询将是:

users = User.joins(:house)

--更新 如果您想过滤结果,请自由添加 where 子句

users = User.joins(:house).where(your_filter_conditions)