2016-08-27 5 views
0

Пользователи могут следовать за другими пользователями через FollowingRelationshipRails автообъединение с has_many через отношения

Я хотел бы быть в состоянии сказать

User.first.followingsи возвращает список пользователей

Это не рабочий:

Class User 

    has_many :following_relationships 
    has_many :followings, through: :following_relationships, foreign_key: :following_id, source: :user 

end 

Class FollowingRelationship 
    attr_accessible :following_id, :follower_id 

    belongs_to :followings, class_name: "User" 

end 

User.first.followings дает это в conso le:

SELECT "users".* FROM "users" INNER JOIN "following_relationships" ON "users"."id" = "following_relationships"."user_id" WHERE "following_relationships"."user_id" = 1 
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: following_relationships.user_id: SELECT "users".* FROM "users" INNER JOIN "following_relationships" ON "users"."id" = "following_relationships"."user_id" WHERE "following_relationships"."user_id" = 1 

Кто-нибудь видит, какую часть мне не хватает?

ответ

2

Я думаю, проблема в том, что FollowingRelationship модель не имеет никакого отношения к User.
Он должен иметь belongs_to :user, так как вы указали source: :user, не так ли?

Я не совсем понимаю ваши модели и отношения между ними, но belongs_to :followings выглядит довольно странно.
belongs_to использует уникальную форму, поскольку он не может принадлежать более чем одному объекту.

ОБНОВЛЕНИЕ 1
Чтобы быть более понятным. Я думаю, что вы должны иметь

class FollowingRelationship 
    … 
    belongs_to :user 
    belongs_to :follower 
end 

Это означает followings_relationships таблица должна иметь user_id и follower_id столбцов.

UPDATE 2
После некоторого разговора мы поняли это. Вот код, который вы должны иметь

class User < ActiveRecord::Base 

    has_many :fade_relationships, foreign_key: :faded_id 

    has_many :fadings, through: :fade_relationships, source: :fading 

end 

class FadeRelationship < ActiveRecord::Base 
    attr_accessible :faded_id, :fading_id 

    belongs_to :fading, class_name: "User" 

end 
+0

Я хотел бы быть в состоянии сказать User.first.followings и возвращает список пользователей – slindsey3000

+0

Вы говорите, что FollowingRelationship не имеет никакого отношения с Пользователем. У меня есть это в этом классе ... принадлежит_to: followings, class_name: «Пользователь» ... Я устанавливаю связь с пользователем там. – slindsey3000

+0

Да, я его раньше не видел. 'User.first.followings' означает, что' followings' должно быть в 'User', а не' FollowRelationship'. – Aleksey