2016-03-04 3 views
1

Я постоянно застрял в этом. У меня много разных отношений между пользователями, дружбой и профилями. Ничто не работает для меня, я немного разочарован. Пожалуйста, кто-нибудь может мне помочь?undefined method `profile 'для nil: NilClass Rails

ошибка происходит в этом блоке кода

<%= friendship.friend.profile.name %> 

ГЗС ошибки являются:

block in _app_views_users_show_html_erb__2756270183135360761_70272652488180 

и

_app_views_users_show_html_erb__2756270183135360761_70272652488180 

В моих пользователей/show.html.erb

<h4> <%= current_user.profile.name%> Friends</h4> 
     <ul> 
      <% for friendship in @user.friendships %> 
      <li> 
       <%= friendship.friend.profile.name %> 
       (<%= link_to "remove", friendship, :method => :delete %>) 
      </li> 
      <% end %> 
     </ul> 

в user.rb модели

has_many :friendships 
has_many :friends, through: :friendships 
has_one :profile 

в friendship.rb модели

class Friendship < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :friend, :class_name => 'User' 
    belongs_to :profile 
end 

в profile.rb модели

class Profile < ActiveRecord::Base 

belongs_to :user 
has_many :friendships 
has_many :friends, through: :friendships 
end 

в routes.rb

Rails.application.routes.draw do 

devise_for :users, :controllers => { registrations: 'registrations' } 
resources :users do 
    resource :profile 
end 
resources :friendships 
end 

в users_controller.rb

def show 
    @user = current_user 
    @user = User.find(params[:id]) 

end 

ответ

1

Вы сказали, что в приложении есть только два пользователя, и что они оба являются друзьями, но в соответствии с выходом консоли User.last.friendships, который вы опубликовали в комментариях ответа Заида, есть 3 разных идентификаторы пользователей (6, 2 и 5). Кажется, что в вашей таблице соединений есть дружеская дружба, которая больше не существует. Это приведет к ошибке, которую вы получаете.

Поскольку ошибка происходит, когда вы пытаетесь вызвать profile на friend, я предполагаю, что потерял Пользователь либо 2 или 5.

Вы должны удалить странствующий дружбу вручную и добавить dependent: :destroy после has_many :friendships в вашем Модель пользователя, чтобы избежать повторения проблемы в будущем.

+0

Привет @Scott Schupbach Я считаю, что это может быть правильный ответ, но я не могу удалить дружбу вручную. В моей консоли я сделал «User.find (5) .friendships.destroy» Я могу это сэкономить, но это похоже на то, что дружба не прекращается. Когда я делаю User.find (5) .friendships снова дружба все еще там – DaudiHell

+0

У меня все еще есть «SELECT» дружба ». * FROM« дружба »WHERE« дружба ».« User_id »= $ 1 [[" user_id ", 5 ]] => # , # <Дружба id: 12, user_id: 5, friend_id: 2, created_at:" 2016-03-03 19:32:23 ", updated_at:" 2016-03-03 19 : 32: 23 ">]> irb (main): 026: 0> ' что означает '$ 1' в этой строке? '' дружба ". user_id" = $ 1 [["user_id", 5]] ' – DaudiHell

+0

Hi again @Scott Schupbach Ваш ответ, похоже, решил мою проблему ... видимо, мне пришлось перезагрузить консоль ... когда я do 'User.find (5) .friendships' теперь я получаю« SELECT »дружеские отношения». * FROM «дружба» WHERE «дружба». «user_id» = $ 1 [["user_id", 5]] => # 'и ошибка исчезла .... Большое спасибо – DaudiHell

1

Ваш current_user оценивает к нулю, так что его пытаются поставить профиль на ноль. Итак, вы должны обращаться с этим

+0

Я не пытаюсь получить доступ к current_user, я пытаюсь связаться с пользователем, который является другом current_user. Ошибка в этом бите кода '<% = friendship.friend.profile.name%>' – DaudiHell

+0

, тогда ваш 'friend.friend' оценивает нуль, поэтому перед тем, как перейти к этой проверке, чтобы убедиться, что у дружбы есть друг , как в проверке на ноль. –

+0

В моей консоли rails я сделал «User.last.friendships» и подумал, что у этого пользователя есть друг (в приложении есть только два пользователя, и они оба являются друзьями). Это то, что я получаю в консоли '[# <Друг id: 10, user_id: 6, friend_id: 2, created_at:" 2016-03-03 15:53:24 ", updated_at:" 2016-03-03 15: 53:24 ">, # <Дружба id: 13, user_id: 6, friend_id: 5, created_at:" 2016-03-04 00:47:26 ", updated_at:" 2016-03-04 00:47:26 " >]> ' – DaudiHell