Ruby on rails Activemodel沿树向上遍历
型号: 让列表下降很容易: 我要做的是显示所有属性route:properties\u path,但仅显示1家公司的属性,并在视图中提供客户端的链接 我有几种解决方案: 在sql中编写RightOuterJoin是在我的开发环境中使用sqlite,因此需要postgress才能使其正常工作 暴力循环:获取该公司的所有客户机,然后在1个哈希中获取每个客户机的所有属性 所以我的问题是,有没有一种更优雅、也许更适合rails的方式来实现这一点,而我却错过了 我已经看过了。但这是我的问题: 我没有拿回财产 解决方案:我很愚蠢,irb/pry只打印第一张记录:Ruby on rails Activemodel沿树向上遍历,ruby-on-rails,Ruby On Rails,型号: 让列表下降很容易: 我要做的是显示所有属性route:properties\u path,但仅显示1家公司的属性,并在视图中提供客户端的链接 我有几种解决方案: 在sql中编写RightOuterJoin是在我的开发环境中使用sqlite,因此需要postgress才能使其正常工作 暴力循环:获取该公司的所有客户机,然后在1个哈希中获取每个客户机的所有属性 所以我的问题是,有没有一种更优雅、也许更适合rails的方式来实现这一点,而我却错过了 我已经看过了。但这是我的问题: 我没有拿回财
@company.properties可以工作:您可以使用它,因为它有很多直通功能,rails非常聪明,可以解决这个问题
class Company
has_many :clients
has_many :properties, through: :clients
end
class Client
belongs_to :company
has_many :properties
end
class Property
belongs_to :client
end
@company = Company.find(1)
@company.properties
但是如果你也想要一个到客户机的链接,我猜你想要在客户机上循环,并为每个客户机显示属性,所以你想要快速加载
Company.includes(clients: [:properties]).find(1)
我以前一直在探索。但即使使用through::clients,我也只返回公司数据,而不返回属性。还使用了.select,但似乎没有得到结果。。。也许我做错了。你不应该为了急切的装载而需要很多东西。
[4] pry(main)> @company = Company.includes(clients: [:properties]).find(1)
Company Load (0.2ms) SELECT "companies".* FROM "companies" WHERE "companies"."id" = ? LIMIT 1 [["id", 1]]
Client Load (3.5ms) SELECT "clients".* FROM "clients" WHERE "clients"."company_id" IN (1)
Property Load (5.9ms) SELECT "properties".* FROM "properties" WHERE "properties"."client_id" IN (2, 12)
=> #<Company id: 1, name: "coolDEVOPS2", created_at: "2014-10-31 11:05:05", updated_at: "2014-11-25 09:27:38">
[5] pry(main)>
class Company
has_many :clients
has_many :properties, through: :clients
end
class Client
belongs_to :company
has_many :properties
end
class Property
belongs_to :client
end
@company = Company.find(1)
@company.properties
Company.includes(clients: [:properties]).find(1)