Ruby on rails 基于属性的数组对象查找

Ruby on rails 基于属性的数组对象查找,ruby-on-rails,arrays,activerecord,associations,Ruby On Rails,Arrays,Activerecord,Associations,我的应用程序有以下型号:用户和观察列表。用户具有属性id、名称,监视列表具有属性用户id、朋友id class WatchList < ActiveRecord::Base belongs_to :user has_many :friends, :class_name => "User", :foreign_key => "friend_id" end class User < ActiveRecord::Base has_one :watch_list

我的应用程序有以下型号:用户和观察列表。用户具有属性id、名称,监视列表具有属性用户id、朋友id

class WatchList < ActiveRecord::Base
  belongs_to :user
  has_many :friends, :class_name => "User", :foreign_key => "friend_id"
end

class User < ActiveRecord::Base
  has_one :watch_list
  has_many :friends, :through => :watch_list

  def friends_with(friend_id)
    self.friends.each do |f|
      if f.id == friend_id
        return true
      end
    end
    return false
  end
end
类监视列表“用户,:外键=>“朋友id”
结束
类用户:观看列表
def friends_with(friends_id)
自已的朋友,每个人都有|
如果f.id==friend\u id
返回真值
结束
结束
返回错误
结束
结束
出于某种原因,当我使用@current\u user.friends\u和(friend\u id)时,我总是得到“true”作为响应。你知道为什么这样不行吗?(我知道@current_用户的作品)


谢谢

你想用这种方法做什么?确定一个用户是否是另一个用户的朋友(通过观察列表)? 按照惯例,在ruby中,返回true或false的方法以询问标记结束

您可以使用“包含”选项?数组方法直接与do

@current_user.friends.include?(friend)
在本例中,您直接使用friend对象,而不是其id

或编写如下方法:

我想尝试一下:

def has_a_friend_with_id?(friend_id)
  friends.map(&:id)include? friend_id
end

我重新命名了您的方法,以获得更有意义的内容…

您的回答很有意义,但是我在使用方法时遇到了一个错误:Mysql::error:Unknown列“users.friend\u id”在“on子句”中:选择
users
*FROM
users
internal JOIN
watch\u list
。friend\u id=
watch\u list
.id在哪里(
watch\u list
.user\u id=5))您是否正在使用@current\u user.have\u friend\u和\u id?(user.id)?您需要在has\u a\u friend\u中传递一个整数(用户id)作为attibute?方法。是的,我认为这与我的联想有关。一个用户通过一个监视列表拥有许多朋友。监视列表属于某个用户,并且有许多朋友(这些朋友属于用户级别)。