Ruby On Rails - 名前空間のリソース
概要
Rails でのモデルの名前空間設定で問題が発生しました。 私のアプリにはこれらのモデルがあります
Request
Food
Clothing
Request::Food
Request::Clothing
Request::Food のような名前空間モデルを引数として渡しましたが、この関数は、名前空間モデル Request::Food を呼び出す必要がある場所で、依然として Food を呼び出します。 Requests::Food のように名前空間を更新してみましたが、うまくいきました。
この件については何か特別な理由があるのでしょうか?この名前空間 Request::Food、Request::Clothing を維持する方法はありますか?
例:
def authorize(resource)
policy_object = "#{resource.name}Policy".classify.constantize
end
authorize(Request::Food) は、RequestFoodPolicy の代わりに FoodPolicy を返します
解決策
モデルに名前空間を設定する際には、いくつかの点に注意する必要があります。
したがって、あなたのモデルは次のようになります-
class Request::Food < ApplicationRecord
## this should not be foods
self.table_name = 'food_requests'
## instance method
def get_food;end
Request::Food.first.get_food を呼び出す必要があります
これを確認するには、Rails コンソールにアクセスし、Request::Food.new を押して、どのテーブルがヒットしているかを確認します。