我的Rails引擎模型看起来像这样:
module Adhocracy
class Membership < ActiveRecord::Base
. . .
end
end
所以我希望能够使用Adhocracy::Membership
访问它。但是,我在这个命名空间控制器中收到错误:
module Api
module V1
class Adhocracy::MembershipsController < ApplicationController
def index
@memberships = Adhocracy::Membership.where(params)
end
end
end
end
错误是:
uninitialized constant Api::V1::Adhocracy::Membership
如果我使用调试器进入此控制器并输入Adhocracy
,则会返回Api::V1::Adhocracy
,而Adhocracy::Membership
会返回上述错误。但是,如果我使用调试器进入另一个控制器(例如Api::V1::SessionsController
),Adhocracy::Membership
将返回预期的模型。知道发生了什么事吗?
答案 0 :(得分:1)
由于Ruby的工作原理:它首先搜索当前的类,然后搜索它的祖先。
所以Adhocracy
与Api::V1::Adhocracy
中的MembershipsController
匹配,并在那里搜索Membership
。
在另一个没有匹配的控制器中,搜索沿着祖先树向下,直到它到达Object
,其中Adhocracy
被定义。
为了确保获得顶级常量,请附加::
,以便:::Adhocracy::Membership