次のモデル(Rails 3.2rc1)にはごく小さな問題があります。オーナーシップは、プロジェクト(Projects)とブログ(Blogs)をユーザー(所有者)にマッピングすることで、オーナーシップを異なる方法で扱うさまざまな種類のブログが存在します。has_many:1つのポリモーフィック・クラスとサブクラス化されたレッグ・ビーブブとの関係
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
誤動作だけ:"ownable_type" = 'Blog'
:
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" = 'SiteBlog'
でなければなりませんが、ARELに教える方法はわかりません。
アイデア?
これはちょっと恥ずかしいことです:-)実際には、試用版アプリケーションで問題の原因となっていました。このためのスペックを書く時間。 – svoop