2010-09-24 13 views
0

Мое приложение имеет следующие модели: 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) Я всегда получаю «истина» в качестве ответа. Любые идеи, почему это не будет работать правильно? (Я знаю, что работает @current_user)

Спасибо!

ответ

0

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

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

@current_user.friends.include?(friend) 

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

Или написать Methode как следующее:

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

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

я переименовал свой метод для того, чтобы иметь что-то более значимое ...

+0

ваш ответ имеет большой смысл, но я получаю сообщение об ошибке при использовании метода: Mysql :: Error: Неизвестный столбец «users.friend_id» в разделе «on»: SELECT 'users'. * FROM' users' INNER JOIN ' watch_lists' ON ​​'users'.friend_id =' watch_lists'.id WHERE (('watch_lists'.user_id = 5)) – scott

+0

Используете ли вы @ current_user.has_a_friend_with_id? (user.id)? Вам нужно передать целое число (идентификатор пользователя) в качестве attibute в has_a_friend_with_id? метод. – Yannis

+0

Да - Я думаю, что это как-то связано с моими ассоциациями. Пользователь has_many друзей через watch_list. Пользователь watch_list принадлежит пользователю и друзьям has_many (эти друзья принадлежат классу User). – scott

Смежные вопросы