从命名空间控制器中访问Rails引擎模型

时间:2014-03-12 20:38:49

标签: ruby-on-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 个答案:

答案 0 :(得分:1)

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

所以AdhocracyApi::V1::Adhocracy中的MembershipsController匹配,并在那里搜索Membership

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

为了确保获得顶级常量,请附加::,以便:::Adhocracy::Membership