我经常陷入困境。我在用户,友谊和个人资料模型之间有很多关系。似乎没有什么对我有用,我有点沮丧。请有人帮帮我吗?
错误发生在这段代码中
<%= friendship.friend.profile.name %>
错误消息是:
block in _app_views_users_show_html_erb__2756270183135360761_70272652488180
和
_app_views_users_show_html_erb__2756270183135360761_70272652488180
在我的users / 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
答案 0 :(得分:1)
您的current_user正在评估为nil,因此它试图将配置文件设置为nil。所以你必须处理
答案 1 :(得分:1)
你说应用程序中只有两个用户并且他们都是朋友,但根据你在Zaid的回答的评论中发布的User.last.friendships
的控制台输出,有3个不同的用户ID( 6,2和5)。从您不再存在的用户看来,您的联接表中存在一个幽灵友谊残余。这会导致你得到的错误。
因为当您尝试在profile
上呼叫friend
时发生错误,我认为丢失的用户是2或5。
您应手动删除错误的友情,并在用户模型中的dependent: :destroy
之后添加has_many :friendships
,以避免日后重复此问题。