如何从has_many中的数组中获取单个属性:通过关联(用户/朋友模型)

kwy*_*g11 0 associations ruby-on-rails-3

在我的用户模型中,我有以下内容:

class User < ActiveRecord::Base
  has_many :friendships, dependent: :destroy
  has_many :friends, :class_name => "User", :foreign_key => "friend_id"

  has_many :pending_friends, 
   :through => :friendships, 
   :conditions => "status = 'pending'", 
   :foreign_key => "user_id", 
   :source => :friend

  has_many :requested_friends, 
   :through => :friendships,
   :source => :friend, 
   :conditions => "status = 'requested'"

  def friends
    direct_friends | inverse_friends
  end
Run Code Online (Sandbox Code Playgroud)

在我的友谊模型中,我有以下内容:

class Friendship < ActiveRecord::Base
 belongs_to :user
 belongs_to :friend, :class_name => "User", :foreign_key => "friend_id"
Run Code Online (Sandbox Code Playgroud)

在我看来,我创建了一个用户朋友的数组,如下所示.此代码使用来自朋友的"用户"数据库模型属性的所有数据来工作和填充数组.

  User.first.friends
Run Code Online (Sandbox Code Playgroud)

但是,我希望能够呼叫用户的朋友的名字.那么,例如,我不应该做这样的事情吗?

    User.first.friends.map(&:name)
Run Code Online (Sandbox Code Playgroud)

如何获得仅包含朋友姓名的数组,而不是所有朋友的用户属性?我也很感激,如果有人能告诉我为什么.使用了第一个(我从这里得到了它:Rails从Friends模型中调用用户记录),因为它不仅仅获取用户朋友的第一个实例(它获取所有实例) ).为什么这样做:

 User.friends 
Run Code Online (Sandbox Code Playgroud)

返回一个空数组?

meg*_*gas 5

尝试方法采摘:

User.first.friends.pluck(:name)
Run Code Online (Sandbox Code Playgroud)

您应该使用first方法从表中检索一个对象.用户是包含大量用户的表.