2014-03-12 68 views
0

内访问Rails的发动机型号我有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将返回预期模型。任何想法发生了什么?

回答

1

这是由于Ruby的工作原理:它首先在当前类中搜索,然后在其祖先中搜索。

所以Adhocracy匹配Api::V1::Adhocracy在您的MembershipsController,它在那里搜索Membership

而在另一个不匹配的控制器中,搜索沿着祖先树向下,直到它到达Object,其中Adhocracy被定义。

为了确保获得最高级别的常量追加::导致你:::Adhocracy::Membership

+0

有道理,和它的作品! – nullnullnull

相关问题