簡體   English   中英

從命名空間控制器中訪問Rails Engine模型

[英]Accessing a Rails Engine model from within a namespaced controller

我有看起來像這樣的Rails Engine模型:

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將返回預期的模型。 知道發生了什么嗎?

它是由於Ruby的工作原理而產生的:它首先在您當前的類中搜索,然后在其祖先中搜索。

因此, Adhocracy在您的MembershipsController匹配Api::V1::Adhocracy ,並在其中搜索Membership

而在另一個沒有匹配項的控制器中,搜索沿着祖先樹向下進行,直到到達定義了Adhocracy Object

為確保獲取頂級常量,請附加::導致::Adhocracy::Membership

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM