我有兩個使用people
表的模型:Person
和Person::Employee
(它繼承自Person
)。 people
表具有type
列。「has_many:through」通過與STI的多態關聯關聯
還有另一個模型,Group
,它有一個多態關聯稱爲:owner
。 groups
表具有owner_id
列和owner_type
列。
應用程序/模型/ person.rb:
class Person < ActiveRecord::Base
has_one :group, as: :owner
end
應用程序/模型/人/ employee.rb:
class Person::Employee < Person
end
應用程序/模型/組。 rb:
class Group < ActiveRecord::Base
belongs_to :owner, polymorphic: true
belongs_to :supervisor
end
的問題是,當我創建了一個Person ::員工用下面的代碼中,owner_type
列被設置爲不正確的值:
group = Group.create
=> #<Group id: 1, owner_id: nil, owner_type: nil ... >
group.update owner: Person::Employee.create
=> true
group
=> #<Group id: 1, owner_id: 1, owner_type: "Person" ... >
owner_type
應設置爲"Person::Employee"
,而是它設置爲"Person"
。
奇怪的是,這似乎並沒有打電話Group#owner
時引起任何問題,但創建像下面的協會當它導致的問題:
應用程序/模型/ supervisor.rb:
class Supervisor < ActiveRecord::Base
has_many :groups
has_many :employees, through: :groups, source: :owner,
source_type: 'Person::Employee'
end
在這種類型的關聯,調用Supervisor#employees
會沒有結果,因爲它是查詢WHERE "groups"."owner_type" = 'People::Employees'
但owner_type
設置爲'People'
。
爲什麼此字段設置不正確,可以做些什麼?
編輯:
據this,該owner_type
場不越來越設置不正確,但它是按設計工作和字段設置爲基地 STI模型的名稱。
這個問題似乎是在的has_many:通過協會Group
s的一組owner_type
與模型的自己名稱搜索,而不是基地模型的名字。
設置正確查詢Person::Employee
條目的has_many :employees, through: :group
關聯的最佳方法是什麼?
謝謝,我不知道'has_many'可以採取Proc。 – hololeap