art*_*ave 3 activerecord ruby-on-rails
这是简单的继承(STI)设置:
class Parent < ActiveRecord::Base
end
class Daughter < Parent
end
class Son < Parent
end
Run Code Online (Sandbox Code Playgroud)
快速尝试控制台.期待Parent.subclasses返回两个子类,但什么也没得到!
ruby-1.9.2-p0 > Parent.subclasses
=> []
Run Code Online (Sandbox Code Playgroud)
还有,打电话
ruby-1.9.2-p0 > Daughter.subclasses
=> []
Run Code Online (Sandbox Code Playgroud)
,正确返回没有子节点,使父开始识别子作为子类:
ruby-1.9.2-p0 > Parent.subclasses
=> [Daughter(id: integer, type: string, created_at: datetime, updated_at: datetime)]
Run Code Online (Sandbox Code Playgroud)
同样适用于另一个子类:
ruby-1.9.2-p0 > Son.subclasses
=> []
ruby-1.9.2-p0 > Parent.subclasses
=> [Daughter(id: integer, type: string, created_at: datetime, updated_at: datetime), Son(id: integer, type: string, created_at: datetime, updated_at: datetime)]
Run Code Online (Sandbox Code Playgroud)
这是rails 3,但在2.3.10上表现出相同的行为
这是一个已知问题
一种解决方法是在基类文件的底部注册子类.
%w(daughter son).each {|r| require_dependency r } if Rails.env.development?
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
903 次 |
| 最近记录: |