簡體   English   中英

Rails關注點,如何在API控制器中包含關注點

[英]Rails concerns, how to include a concern inside an api controller

我正在構建Rails api,當前具有以下文件夾結構:

在此處輸入圖片說明

error_serializer.rb文件是一個模塊:

module ErrorSerializer
  extend ActiveSupport::Concern

  ...methods here...
end

我可以將其包含在任何api控制器中,例如:

class Api::TemplatesController < ApiController
  include ErrorSerializer
  ...
end

但是,由於這個errors_serializer模塊僅與api控制器相關,因此我想將文件移至“ api/concerns/error_serializer.rb ”。

但這會產生錯誤:

ActionController::RoutingError (uninitialized constant Api::TemplatesController::ErrorSerializer)

我嘗試將文件內的名稱更改為:

module Api::ErrorSerialzer

但是出現了同樣的錯誤。

那么我必須更改什么才能移動該文件?

由於Rails希望模塊命名遵循文件結構,因此應將您的關注點命名為:

module Api::Concerns::ErrorSerializer

由於您將其包含在Api::TemplatesController ,因此我將這樣做:

class Api::TemplatesController < ApiController
  include Api::Concerns::ErrorSerializer
  ...
end

為了幫助不斷查找。

感謝@jvillian和這篇博客文章的回答,我能夠弄清楚做到這一點的“ Rails”方法(因為實際上我將需要所有Api控制器的關注,而且我的api控制器不在api名稱空間之外) 。 因此,我發布此解決方案是因為(我認為)這是首選方式:

我將error_serialzier.rb文件移到api / concerns中,並更改了代碼以包含Api名稱空間:

module Api::Concerns::ErrorSerializer
  extend ActiveSupport::Concern
  ...
end

我還移動了api_controller.rb文件,並將其放在/ api文件夾中,從而放入API模塊名稱空間,所以現在看起來像這樣:

class Api::ApiController < ActionController::API
  before_action :authenticate_api_user!
  include DeviseTokenAuth::Concerns::SetUserByToken 
  include Concerns::ErrorSerializer

  respond_to :json
end

這消除了未初始化的常量錯誤。

暫無
暫無

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

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