这是我的关系:
class House
has_many: appartments
end
class Appartments
belongs_to: house
end
class Region
has_many: houses
end
控制器:
@country = Country.find(params[:country_id])
@regions = @country.regions
@house = House.find(params[:id])
查看
在房子页面上,我有一个标签,我想要显示属于房子的公寓。
这是我的循环:
- @regions.each do |region|
- region.houses.each do |house|
- @house.appartments.each do |appartment|
%section
.row
.span5
%h2 #{link_to appartment.name, country_region_appartment_path(@country, region, appartment)}
%p
我创建了这个循环,因为我需要链接的区域值。它工作..我得到属于房子的公寓...但我乘以记录/输出。
我做错了什么?
Thanks..remco
答案 0 :(得分:0)
@house
与您视图中的region.houses
无关。您遍历一个区域中的所有房屋,但随后您使用控制器@house
上填充的相同变量
我也相信有一些协会缺失:
class Region
has_many: houses
belongs_to :country
end
class House
has_many :appartments
belongs_to :region
end
class Appartment
belongs_to :house
end
在您的控制器上,您只需查询区域:
@country = Country.find(params[:country_id])
@regions = @country.regions
在您的视图中,您应该从家中移除@
,因为它只引用一个预定义的房屋:
- @regions.each do |region|
- region.houses.each do |house|
- house.appartments.each do |appartment|
这是一种原始的方式,因为它会按需触发许多查询。因此,如果您有许多记录,则可以使用来自include
的{{1}}和join
等内容来热切地加载您的数据。