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]) 

Посмотреть

На странице дома у меня есть вкладки, где я хочу, чтобы показать Appartments, которые принадлежат дом.

Это мой цикл:

- @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

Можете уточнить о проблеме/что вы ожидаете от этого? – MrYoshiji

+0

Я хочу показать квартиры, которые принадлежат к дому .... он работает, но он показывает квартиры умножаются раз – Remco

+0

Попробуйте с 'appartments = @ regions.flat_map (&: дома) .flat_map (&: апартаменты) .uniq' а затем зациклируйте на нем с помощью .each' – MrYoshiji

ответ

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 и join от ActiveRecord.

+0

Я пробовал это, но потом я получил все квартиры из региона, а не из дома – Remco

+0

Я обновил ответ. – MurifoX

+0

Murifo ... спасибо ... я пробовал вашу идею, но потом я получаю все квартиры из региона ... – Remco

Смежные вопросы