我正在设置一个用于添加朋友的自引用用户模型。我有一个has_many :friend_requests
的用户模型。当用户添加朋友时,会在friend_request
模型中创建包含user_id
和friend_id
的记录。
我可以列出friend_request
模型中所有请求的friend_ids,但我无法弄清楚如何在视图中没有像这样的丑陋循环的情况下轻松将这些ID转回用户名:
<% for user in @user.friend_requests %>
<% @usr = User.where(id: user.friend_id) %>
<% @usr.each do |usr| %>
<%= usr.username %>
<% end %>
<% end %>
这是friend_request控制器:
def index
@incoming = FriendRequest.where(friend: current_user)
@outgoing = current_user.friend_requests
@user = current_user
end
是否有更简单的方法从Users表中获取用户名,而不循环遍历friend_request表中的所有friend_ids
答案 0 :(得分:1)
我认为你应该创建一个&#34; has_many:通过&#34;
class Friends < ApplicationRecord
belongs_to :user
belongs_to :friend_requests, class_name: 'User'
end
class User < ApplicationRecord
has_many :friends
has_many :friend_requests, through: :friends
end
@user.friend_requests << @other_user
@other_user.friend_requests << @user
@user.friend_requests.delete @other_user
@other_user.friend_requests.delete @user
答案 1 :(得分:0)
这是我的一个项目的代码,我使用的是Friendship而不是FriendRequest
class User < ActiveRecord::Base
has_many :friendships, dependent: :destroy
has_many :friends, through: :friendships
has_many :user_followers, class_name: 'Friendship', foreign_key: 'friend_id', dependent: :destroy
has_many :followers, through: :user_followers, source: :user
end
class Friendship < ActiveRecord::Base
belongs_to :user
belongs_to :friend, class_name: "User"
end
在控制器@friends = current_user.friends
中。
然后只看两行
<% @friends each do |user| %>
<%= user.username %>