我是Ruby和Activer Record的新手,但我对这个问题很难过。 我有两张桌子:租户和公寓 以下是定义:
CREATE TABLE tenants(
id serial PRIMARY KEY,
name varchar(50) NOT NULL,
age integer NOT NULL,
gender varchar(10) NOT NULL,
apartment_id integer NOT NULL
);
CREATE TABLE apartments(
id serial PRIMARY KEY,
address varchar(50) NOT NULL,
monthly_rent decimal(12,2) NOT NULL,
sqft integer NOT NUlL,
num_beds integer NOT NULL,
num_baths integer NOT NULL
);
我被问到的问题是:
遍历每间公寓,每间公寓,显示地址及所有租户
我进入psql并可以使用此查询找到答案: 从公寓a,租户b中选择a.address,b.name,其中a.id = b.apartment_id按a.address排序;
我可以迭代每个公寓,然后迭代租户并以这种方式找到答案,但它不是太过分,如果内部循环没有匹配,我仍然需要一种不打印地址的方法。这是代码:
Apartment.find_each { |user|
puts "-Outer Address #{user.address}"
Tenant.find_each { | tenant|
puts "-inner Tennant #{tenant.name}" if tenant.apartment_id==user.id
} # tenant where
} #apartment.find
我确信必须有一个方法可以将两个循环放在一起,但我只是想不出这个...谢谢。
答案 0 :(得分:0)
您可以使用includes与eager load关联,然后循环播放它们:
Apartment.includes(:tenants).find_each do |apartment|
apartment.tenants.each do |tenant|
# print tenant details
end
end