ruby-on-rails Ruby On Rails -开发资源

t98cgbkg  于 2023-10-21  发布在  Ruby
关注(0)|答案(1)|浏览(158)

我在rails中遇到了一个命名空间模型的问题。我的应用里有这些模型

Request
Food
Clothing
Request::Food
Request::Clothing

我传递了一个像Request::Food这样的命名空间模型作为参数,但是函数仍然调用了Food,而它应该调用的是命名空间模型Request::Food。我试过像Requests::Food一样更新命名空间,它工作正常。
这件事有什么特别的原因吗?有什么方法可以保留这个命名空间Request::FoodRequest::Clothing吗?
范例:

def authorize(resource)
    policy_object = "#{resource.name}Policy".classify.constantize
 end

authorize(Request::Food)返回FoodPolicy而不是RequestFoodPolicy

s8vozzvw

s8vozzvw1#

在为模型分配名称空间时,您必须注意一些事情-
1.你需要显式地命名你的表,因为model b将指向table b,但model a:b指向table b,你也必须提到这一点。
1.确保你不会错过改变a:b model在以往任何时候都需要作为model bmodel a:b是不同的,现在,最好去与新的名称,如model a:bmodel c
所以你的模型应该是-

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 console并点击Request::Food.new,以查看被点击的表。

相关问题