Ruby activerecord与ActiveRecord

时间:2016-10-01 20:42:01

标签: ruby activerecord

我是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

我确信必须有一个方法可以将两个循环放在一起,但我只是想不出这个...谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用includeseager load关联,然后循环播放它们:

Apartment.includes(:tenants).find_each do |apartment|
    apartment.tenants.each do |tenant|
        # print tenant details
    end
end