【发布时间】:2014-02-19 16:27:34
【问题描述】:
我在尝试将 STI 和多态关联与以下结构结合时遇到了一些问题:
class User < ActiveRecord::Base
end
class Runner < User
has_many :subscriptions, as: :subscriber, :dependent => :destroy
has_many :areas, through: :subscriptions
end
class Trainer < Runner
end
class Subscription < ActiveRecord::Base
belongs_to :subscriber, polymorphic: true
belongs_to :area
end
class Area
end
当我在控制台中尝试时:
Runner.find(2101).areas
SELECT "areas".* FROM "areas" INNER JOIN "subscriptions" ON "areas"."id" =
"subscriptions"."area_id" WHERE "subscriptions"."subscriber_id" = $1 AND
"subscriptions"."subscriber_type" = $2 [["subscriber_id", 2101], ["subscriber_type",
"User"]]
=> #<ActiveRecord::Associations::CollectionProxy []>
但是这个赛跑者有记录:
#<Subscription id: 3, area_id: 2, subscriber_id: 2101, subscriber_type: "Runner", primary_area: true>
但我不明白为什么活动记录在寻找用户而不是跑步者。
知道为什么吗?还是更好的设计?
【问题讨论】:
-
这是一个非常相似的问题,但有更多答案:stackoverflow.com/questions/9628610/…
标签: ruby-on-rails sti polymorphism