Проблема доступа к данным взаимосвязи в представлении — Rails 3

#ruby-on-rails #ruby-on-rails-3

#ruby-on-rails #ruby-on-rails-3

Вопрос:

У меня есть сайт, на котором есть участники, имеющие отношение has_one к своему профилю.

Я хочу отобразить некоторую информацию об их профиле участника на созданной мной панели администратора.

В консоли rails я могу получить доступ к информации с помощью:

 member = Member.find(1)
member.profile.first_name
  

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

 def index
    @members = Member.all
end
  

В моем представлении администратора у меня есть

 <% @members.each do |member| %>
    <p><%= member.id %></p>
    <p><%= member.profile.first_name %></p>
<% end %>
  

за исключением этого, возникает ошибка неопределенного метода

 undefined method `first_name' for nil:NilClass
  

Как я могу получить доступ к информации профиля в моем представлении?

Ответ №1:

Я думаю, что у некоторых ваших участников нет связанного с ним профиля. Чтобы предотвратить ошибку, вы можете сделать что-то вроде этого:

 <% @members.each do |member| %>
    <p><%= member.id %></p>
    <p><%= member.profile ? member.profile.first_name : "-" %></p>
<% end %>
  

Обновить:

Вам лучше включить profile в сам контроллер, чтобы предотвратить проблему с N 1 запросом. Вы можете сделать это в контроллере:

 def index
  @members = Member.includes(:profile)
end