是否有更简洁的方法从父模型获取属性

时间:2018-05-09 01:29:21

标签: ruby-on-rails

我正在设置一个用于添加朋友的自引用用户模型。我有一个has_many :friend_requests的用户模型。当用户添加朋友时,会在friend_request模型中创建包含user_idfriend_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

2 个答案:

答案 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 %>