Мое приложение имеет следующие модели: 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)
Спасибо!
ваш ответ имеет большой смысл, но я получаю сообщение об ошибке при использовании метода: 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
Используете ли вы @ current_user.has_a_friend_with_id? (user.id)? Вам нужно передать целое число (идентификатор пользователя) в качестве attibute в has_a_friend_with_id? метод. – Yannis
Да - Я думаю, что это как-то связано с моими ассоциациями. Пользователь has_many друзей через watch_list. Пользователь watch_list принадлежит пользователю и друзьям has_many (эти друзья принадлежат классу User). – scott