Итак, я делал такие вещи бесчисленное количество раз в прошлом, но я не могу понять, почему это не работает на этот раз. Я новичок в RoR, и я использовал некоторые новые отношения в своей модели, это единственная причина, о которой я могу думать до сих пор.
Модель пользователя имеет следующие отношения
has_one :profile
has_many :follower_relationships, class_name: "Follow", foreign_key: "following_id"
has_many :followers, through: :follower_relationships, source: :follower
has_many :following_relationships, class_name: "Follow", foreign_key: "user_id"
has_many :following, through: :following_relationships, source: :following
Я пытаюсь составить список подписчиков какого-либо конкретного пользователя, но имена хранятся в профиле пользователя. Я пробовал сделать это:
In the conroller:
def followers
@followers = User.find_by(id: params[:user_id]).followers
end
In the html.erb file:
<% for i in 0..@followers.length %>
<%= @followers[i].profile.first_name %>
<% end %>
Итак, я сначала попробовал for.each
, прежде чем пробовать обычный для l oop. Но он всегда возвращает
ActionView::Template::Error (undefined method `first_name' for nil:NilClass):
2:
3:
4: <% for i in 0..@followers.length %>
5: <%= @followers[i].profile.first_name %>
6: <% end %>
Однако установка <%= @followers.first.profile.first_name %>
возвращает first_name
первого последователя.
Почему вызов первого элемента в массиве работает, когда я пытаюсь это сделать, но не когда я пытаюсь выполнить итерацию по всему массиву?