列子类不工作,在红宝石script/控制台?
-
19-09-2019 - |
题
这个工作:
>> class Foo
>> def xyz()
>> Foo.subclasses
>> end
>> end
=> nil
>> class Bar < Foo
>> end
=> nil
>> class Quux < Bar
>> end
=> nil
>> Foo.new.xyz()
=> ["Quux", "Bar"]
但这不可行。 User
一类是在我的应用程序。
>> User.subclasses
NoMethodError: protected method `subclasses' called for #<Class:0x20b5188>
from [...]/vendor/rails/activerecord/lib/active_record/base.rb:1546:in `method_missing'
from (irb):13
但是,这并!
>> Foo.subclasses
=> ["Quux", "Bar"]
什么在这里?我怎么会列子类的 User
?
解决方案
小类是重写并提出保护基础。rb。看看 http://www.google.com/codesearch/p?hl=en&sa=N&cd=1&ct=rc#m8Vht-lU3vE/vendor/rails/activerecord/lib/active_record/base.rb&q=active_record/base.rb (线1855定义的方法类行1757使得保护).
你可以做同样的用户为你做了Foo:增加一个xyz()方法。
其他提示
就可以解决的访问权限,并不会改变任何东西,可以考虑使用能够访问私有方法的#send方法。
User.send(:subclasses)
tables = ActiveRecord::Base.connection.tables {|t| t.classify.constantize rescue nil}.compact
subclasses = tables.map do |table|
table.singularize.classify.constantize
end
不隶属于 StackOverflow