0

这是我的关系:

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

我创建了这个循环,因为我需要链接的区域值。它有效..我得到了属于房子的公寓......但我将记录/输出相乘。

艾做错了什么?

谢谢..remco

4

1 回答 1

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|

这是一种原始的方法,因为它会按需触发许多查询。因此,如果您有很多记录,您可能会看看使用类似includejoinfrom之类的急切加载数据ActiveRecord

于 2013-08-22T14:22:45.947 回答