Не показывать объект, когда отношения пустые - PullRequest
0 голосов
/ 23 февраля 2012

отношения:

class apartment 
  belongs_to :house
end

class house
  has_many :apartments
end

В методе индекса моего контроллера квартир я нахожу все дома с houses.all. В представлении есть блок домов с правильными (has_many) квартирами

Проблема:

Есть дома без квартир, и я не хочу показывать эти дома на странице моей квартиры. Как я могу это понять?

Ответы [ 3 ]

2 голосов
/ 23 февраля 2012

Вы можете сделать это несколькими способами, перечисляя это:

for house in houses
   if house.appartments.count > 0
     puts house.title
   end
 end 

Или когда вы получаете данные, используя область действия:

scope :with_appartments, lambda { joins(:appartments).group('appartments.id').uniq { |h| h[:id] }  }
myHousesWithAppartments = House.with_appartemnts

Или вы можете использовать счетчик кэша: http://railscasts.com/episodes/23-counter-cache-column

2 голосов
/ 23 февраля 2012

Лучший способ - использовать именованную область в модели вашего дома, что-то вроде этого:

scope :filled, :joins => :apartments

И в действии контроллера вы должны вызвать House.filled

Вот решение с методом выбора:

House.select {|house| house.apartments.any?}
0 голосов
/ 23 февраля 2012

Вы можете использовать метод 'empty?':

<% if !(@house.apartments.empty?) %>
  <% @house.apartments.each do |aprtmt|
    <%= aprtmt.info %>
  <% end %>
<% end %>

Это самый простой способ увидеть это. Правильный Rails говорит, что вы должны поместить свою логику в контроллер, а не в представление. Таким образом, более подходящая реализация была бы в вашем доме # Действие контроллера:

@houses = House.all
@houses_with_apartments = []
@houses.each do |house|
  @houses_with_apartments << house unless house.empty?
end

Затем, по вашему мнению, вы используете переменную @houses_with_apartments.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...