2012-03-02 111 views
6

在對象模型中,我有多的has_many:通過

has_many :likes 
has_many :hates 
has_many :users, :through => :likes 
has_many :users, :through => :hates 

如何獲得用戶的喜好列表?例如。 object.users < ---但我如何通過喜歡或討厭指定?

回答

6

你需要給這兩個不同的關聯不同的名字。什麼

has_many :likes 
has_many :hates 
has_many :likers, :through => :likes, :source => :user 
has_many :haters, :through => :hates, :source => :user 
+0

這就是我想了,但是'has_many'的文檔(ActiveRecord的::協會:: ClassMethods)說:「':through'指定的關聯,通過它來執行查詢[.. 。]':class_name',':primary_key'和':foreign_key' **的選項被忽略**,因爲關聯使用源反射。「 - 所以,':class_name'不會做任何事情,是嗎? – fanaugen 2012-07-11 08:47:16

+0

您是對的,我更新了示例以符合文檔,它引用了源關聯,從中可以推斷出它是User對象。 – 2012-07-11 09:35:21

+0

我認爲':source =>:user'應該是':source =>:users'。 – 2016-04-24 13:09:01

0

你可以不喜歡它:

has_many :user_likes, :through => :likes, :class_name => 'User' 
1

看來我需要添加源了。如果不是Rails將會喜歡like/liker。

has_many :likes 
has_many :hates 
has_many :likers, :through => :likes, :class_name => 'User', :source => 'user' 
has_many :haters, :through => :hates, :class_name => 'User', :source => 'user'