2014-03-12 67 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

相關問題