Techioz Blog

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 を押して、どのテーブルがヒットしているかを確認します。