Поиск объекта в массиве на основе атрибута - PullRequest
0 голосов
/ 24 сентября 2010

Мое приложение имеет следующие модели: user и watch_list.У пользователя есть атрибуты id, name, а в WatchList есть атрибуты user_id, friend_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

По какой-то причине, когда я использую @ current_user.friends_with (friend_id), я всегда получаю «true» в качестве ответа.Есть идеи, почему это не сработает?(Я знаю, @current_user работает)

Спасибо!

1 Ответ

0 голосов
/ 24 сентября 2010

Что вы пытаетесь сделать с этим методом? Определение, является ли пользователь другом с другим (через список наблюдения)? По соглашению, в ruby ​​метод, возвращающий либо true, либо false, заканчивается знаком запроса…

Вы можете использовать include? Метод массива напрямую и сделать

@current_user.friends.include?(friend)

В этом случае вы напрямую используете объект друга, а не его идентификатор ...

Или напишите метод, подобный следующему:

Я бы попробовал что-то вроде:

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

Я переименовал ваш метод, чтобы иметь что-то более значимое ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...