2016-03-11 6 views
1

У меня есть приложение Rails 4. Профиль пользователя has_one. Когда sby регистрирует, он уже является пользователем, но у него будет только профиль после отправки формы.рельсы, проверяющие существование дочерних объектов

На моей странице пользователей я хотел бы показать всех пользователей, у которых есть профиль.

Существует несколько способов отображения пользователей с существующим профилем, но я не знаю, какой из них является предпочтительным.

  1. запросов в контроллере: загружая только пользователей ж/профили

    @users = User.joins(:profile).includes(:profile)...... 
    
  2. Если profile.present? ввиду

    @users = User.includes(:profile)....... 
    
    
    <% if user.profile.present? %> 
        <%= user.profile.first_name %> 
        ........... 
    
  3. Может быть, есть еще лучший подход.

ответ

3

Почему бы вам не пойти другим путем? Загрузите все профили, и он уверен, что каждый профиль будет принадлежать одному пользователю, поэтому следующий код будет делать эту работу без какой-либо условной линии:

В контроллере:

@profiles = Profile.all 

Ввиду:

@profiles.each do |profile| 
    profile.user # it would give you the user, whom it belongs to 
end 

Чтобы избежать запросов n+1, вы можете использовать Profile.includes(:user).all, чтобы предварительно загрузить всех пользователей.

+0

В этом случае вы совершенно правы. Это легко, так как это отношения 1-1. Но есть и другие случаи, когда вы не можете использовать этот. Предположим, вы также должны присоединиться к другой таблице, которая принадлежит пользователю. Какой из них вы выбрали бы из первых двух вариантов? –

+0

Не могли бы вы рассказать об этом в другом вопросе, и я бы ответил на него. –

+0

Конечно, но я должен немного подождать. –

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