![](/img/trans.png)
[英]In Rails, how can I tell, from within a model, whether the request came via a namespaced API controller or regular controller?
[英]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.