我有这样定义的类,我被告知这可能会导致Rails自动加载问题。这背后的原因是什么?我们什么时候应该使用Class.new?
class Integration < ActiveRecord::Base
MYobIdentifier = Class.new(Integration)
end
答案 0 :(得分:1)
由于评论中链接的stackoverflow问题涵盖,
class A
class B
end
end
引起了人们的注意:
A = Class.new do
B = Class.new
end
您的示例的另一个细节是另一个类Integration
作为参数传递给Class.new
。这设置了继承。您可以使用ClassA < ClassB
检查一个类是否继承自另一个类;这会返回true
或nil
:
class A
class B
end
end
A::B < A
# => nil
class A
B = Class.new(A)
end
A::B < A
# => true
这第二个例子与此相同:
class A
class B < A
end
end
A::B < A
# => true
答案 1 :(得分:1)
如果找不到常量(在这种情况下是您的类名),那么Ruby将尝试使用基于常量名称的文件名来查找它。在这种情况下,它将在名为select (
select (
select id from billing where plan_id <> 1 and id < b2.id order by id desc limit 1
)
from billing b2 where plan_id = 1 and id < b1.id order by id desc limit 1
)
from billing b1
order by id desc limit 1
的文件中搜索ERROR: This type of correlated subquery pattern is not supported due to internal error
(此文件会有几个不同的位置)
只要您确定在对MYobIdentifier
进行任何尝试之前已加载m_yob_identifier
类,那么它将始终定义,您无需担心。
同样在您的情况下,我假设您将以Integration
的形式访问它,在这种情况下{I}将始终加载MYobIdentifier
,然后再尝试解析常量。
注意:我认为你最好将课程资本化为Integration::MYobIdentifier