2014-01-05 2 views
0

Пользователь может быть подключен к списку тремя способами: он может владеть им (т. Е. Создал его), он может быть участником (он голосует на нем периодически), или он может любить его , Я позаботился о первых двух случаях, но не могу получить третий («избранное») для работы. Собственность зависит от отношения has_many с «владельцем» внешнего ключа в модели «Список». Общинщик заботится об отношениях has_and_belongs_to_many с списками list_users таблицы join. Я пытаюсь сделать любимцев через has_many: через, но это не работает:Несколько отношений has_many между двумя моделями

user.rb:

has_many :owned_lists, :class_name => "List", :foreign_key=> :owner # this is for the owner/list relationship 
has_and_belongs_to_many :lists # for the normal panelist/list relationship 
has_many :favorites 
has_many :favorite_lists, :through=> :favorites, :class_name => "List" 

list.rb:

belongs_to :owner, :class_name=> "User", :foreign_key => :owner 
    has_many :favoriters, :through=> :favorites, :class_name => "User" 
    has_and_belongs_to_many :users 

favorite.rb

class Favorite < ActiveRecord::Base 
    belongs_to :list 
    belongs_to :user 
end 

Если все идет хорошо, я хотел бы иметь возможность делать user.favorite_lists и получать ассоциацию, содержащую один или несколько списков. Прямо сейчас, я получаю «ActiveRecord :: HasManyThroughSourceAssociationNotFoundError: Не удалось найти исходную (-ие) ассоциации: favorite_list или: favorite_lists в избранной модели. Попробуйте« has_many: favorite_lists,: through =>: favorites,: source => '

Любая помощь вы можете предоставить были бы оценены

+0

Могли бы вы descri что значит «не работает»? – BroiSatse

+0

Я знаю, что он не отвечает на ваш вопрос, но ролик-грамм - хорошее упакованное решение для такого типа ситуации. https://github.com/EppO/rolify –

ответ

0

вы должны указать источник для has_many :through:.

has_many :favorites 
has_many :favorite_lists, :through=> :favorites, :class_name => "List", :source => :list 

Я не уверен, но я думаю, что :class_name не надо здесь

+0

Большое спасибо! – MikeC

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