我試圖通過自連接(基於@Shtééf's answer)在同一模型的記錄之間實現多個關係。我有以下型號多對多與ActiveRecord中的多個自連接的關聯
create_table :relations, force: true do |t|
t.references :employee_a
t.string :rel_type
t.references :employee_b
end
class Relation < ActiveRecord::Base
belongs_to :employee_a, :class_name => 'Employee'
belongs_to :employee_b, :class_name => 'Employee'
end
class Employee < ActiveRecord::Base
has_many :relations, foreign_key: 'employee_a_id'
has_many :reverse_relations, class_name: 'Relation', foreign_key: 'employee_b_id'
has_many :subordinates, through: :relations, source: 'employee_b', conditions: {'relations.rel_type' => 'manager of'}
has_many :managers, through: :reverse_relations, source: 'employee_a', conditions: {'relations.rel_type' => 'manager of'}
end
使用此設置,我可以成功訪問每個記錄的下屬和管理員列表。但是,我有困難創建下列方式
e = Employee.create
e.subordinates.create
e.subordinates #=> []
e.managers.create
e.managers #=> []
的問題是,它不設置關係的類型關係,所以我必須寫
e = Employee.create
s = Employee.create
e.relations.create employee_b: s, rel_type: 'manager of'
e.subordinates #=> [#<Employee id:...>]
難道我做錯了什麼?
而我並不完全確定belongs_to是必要的,但我沒有時間設置t他在我的本地安裝上進行全面練習。你可以試試看,看看你會得到什麼樣的結果。 – 2011-06-21 14:08:07
另外,如果你喜歡走這條路,你應該看看這個問題。它顯示了你正在做的更多的事情,雖然我仍然發現自己有點缺乏清晰度(fyi-問題在問題中得到了回答):http://stackoverflow.com/questions/6426383/rails-協會使用數據的關聯表 – 2011-06-21 15:45:44