2015-06-15 2 views
0

Я создал много-много отношений, как следующая структура.Множественная ассоциация «многие-ко-многим» между двумя моделями

Class User 
has_many :companies, :through => company_admins 
has_many :company_admins 
end 

Class Company 
has_many :company_admins 
has_many :users, :through => company_admins 
end 

Class CompanyAdmin 
belongs_to :company 
belongs_to :user 
end 

Здесь User могут быть назначены в качестве администратора на многих Company.

Теперь я создать еще много-ко-многим с User и Company, где User может последовать многие company. Как я могу это сделать?

Я добавил

Class User 
has_many :companies, :through => company_admins 
has_many :companies, :through => followers 
has_many :company_admins 
has_many :followers 
end 

Class Company 
has_many :company_admins 
has_many :followers 
has_many :users, :through => company_admins 
has_many :users, :through => followers 
end 

Class Follower 
belongs_to :company 
belongs_to :user 
end 

Теперь, если я искать пользователей, которые администратора для любой компании, используя @company.users он ищет в Follower таблице. Может ли кто-нибудь помочь мне с ассоциацией?

ответ

1

Я предполагаю, что ваша ассоциация создана должно быть что-то вроде этого

#user.rb 
Class User 
has_many :company_admins 
has_many :companies, :through => company_admins 
has_many :followers 
has_many :followed_companies, :through => followers, :source => :company 
end 

#company.rb 
Class Company 
has_many :company_admins 
has_many :users, :through => company_admins 
has_many :followers 
has_many :followed_users, :through => followers, :source => :user  
end 

#follower.rb 
Class Follower 
belongs_to :company 
belongs_to :user 
end 

Теперь, если вы даете @company.users, он будет искать в company_admins таблице, и если вы даете @company.followed_users, он будет искать в followers таблице.

Примечание: Не проверено.

+0

Это работает. Я принял ответ. : D – Emu

+0

Еще одна вещь, вы использовали ': class_name'. Я видел, как кто-то использовал ': source'. Не могли бы вы сказать мне разницу? – Emu

+0

@Emu На самом деле это должен быть 'source'. В этом сообщении подробно объясняется http://stackoverflow.com/questions/13611265/rails-difference-between-source-and-class-name-in-models – Pavan

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