Есть ли более лаконичный способ получения атрибутов из родительской модели? - PullRequest
0 голосов
/ 09 мая 2018

Я настраиваю модель самообращения пользователя для добавления друзей. У меня есть модель пользователя, которая has_many :friend_requests. Когда пользователь добавляет друга, в модели friend_request создается запись с user_id и friend_id.

Я могу перечислить все запрошенные friend_ids из модели friend_request, но я не могу понять, как легко превратить эти идентификаторы обратно в имена пользователей без уродливой петли, как это в представлении:

  <% 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_ids в таблице friend_request

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Это код одного из моих проектов, я использую 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 %>
0 голосов
/ 09 мая 2018

Я думаю, вы должны создать "has_many: through"

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...