[英]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.