這裏是我的架構:如何在Rails中爲兩個表之間的兩種不同類型的關係設置has_many關係?
Participant =
id: int
user_id: int
program_id: int
... other fields
end
User =
id: int
name: text
... other fields
end
Program =
id: int
user_id: int # this is the manager of the program
end
所以,在英語:
- 用戶是人。
- 程序由用戶管理。
- 的程序也有一組參與者,每一個都是用戶在Rails的
所以:
class Participant
belongs_to :user
belongs_to
end
class User
has_many :programs
has_many :participants
end
class Program
has_many :participants
belongs_to :user
end
注意,一個用戶真正的has_many程序,它們管理的那些, 。以及通過參與者的has_many程序,這是所有他們參加節目
我要的是能夠說:
-
個
- a_user.manages_programs
- a_user.participates_in_programs
所以用戶的has_many程序兩種口味。我需要做一些神奇的組合:through,:as,:class,或者沿着這些線的東西,但是到目前爲止我無法弄清楚。
繼續這個例子的另外一個問題。我現在有
class User
has_many :participations, class_name: "Participant"
has_many :moderated_programs, class_name: "Program", foreign_key: 'moderator_id'
has_many :participating_programs, through: :participations, class_name: "Program", source: :program
end
class Participant
belongs_to :user
belongs_to :program
end
注意第三行。我想要的是利用這一系列的關聯:參與者有一個user_id和一個program_id。我希望能夠說出u1.participating_programs並獲得一個或多個此用戶參與的程序的列表,但以上操作無效。你能說出我在哪裏嗎?
不錯的完善和我認爲你回答我的跟進查爾斯 – pitosalas
他呢! :-)你應該接受他的答案,它會向你展示你需要的一切。 – weltschmerz
'has_many:managed_programs,class_name:'Program''如何知道程序中應該看到的外鍵叫做'user_id'?因爲該子句在'class User'中找到?所以如果爲了提高準確性,我想將Program中的外鍵改爲'manager_id',那麼我需要做些什麼? 'has_many:managed_programs,class_name:'Program',foreign_key:'manager_id'? – pitosalas