다음 모델 (레일즈 3.2rc1)에 대해서는 약간의 문제가 있습니다. 소유권은 사용자 (소유자)에게 프로젝트와 블로그를 매핑하고 소유권을 다르게 처리하는 여러 유형의 블로그가 있습니다.has_many : 하나의 다형성 및 서브 클래 싱 된 다리 오작동과의 관계를 통해
class User < ActiveRecord::Base
has_many :ownerships, dependent: :destroy
has_many :projects, through: :ownerships, source: :ownable, :source_type => 'Project'
has_many :site_blogs, through: :ownerships, source: :ownable, :source_type => 'SiteBlog'
end
class Ownership < ActiveRecord::Base
belongs_to :ownable, polymorphic: true
belongs_to :owner, :class_name => 'User', foreign_key: 'user_id'
end
class Project < ActiveRecord::Base
has_many :owners, through: :ownerships, as: :ownable
has_many :ownerships, as: :ownable, dependent: :destroy
end
class Blog < ActiveRecord::Base
end
class SiteBlog < Blog
has_many :owners, through: :ownerships, as: :ownable
has_many :ownerships, as: :ownable, dependent: :destroy
end
class ProjectBlog < Blog
belongs_to :project
end
그것은 모두가 지금까지 잘 작동
하지만 SiteBlog#owners
무례한 행동 :
SiteBlog.first.owners
SiteBlog Load (0.8ms) SELECT "blogs".* FROM "blogs" WHERE "blogs"."type" IN ('SiteBlog') LIMIT 1
User Load (1.4ms) SELECT "users".* FROM "users" INNER JOIN "ownerships" ON "users"."id" = "ownerships"."user_id" WHERE "ownerships"."ownable_id" = 231145885 AND "ownerships"."ownable_type" = 'Blog'
=> []
문제는 생성 된 SELECT의 매우 끝 : "ownable_type" = 'Blog'
. 이것이 작동하려면, 그것은 "ownable_type" = 'SiteBlog'
이어야합니다, 그러나 AREL에게 그렇게하도록 가르치는 방법을 알지 못합니다.
아이디어가 있으십니까?
이것은 약간 당황 스럽습니다. 실제로는 작동합니다. 오타가 내 평가판 앱에서 문제를 일으켰습니다. 이를위한 스펙을 작성할 시간. – svoop