【发布时间】:2022-01-04 10:50:52
【问题描述】:
如果有一个模型 Donut 是抽象模型 Food 的子模型:
(这也适用于Food 的所有其他孩子)
# models/food.rb
class Food < ApplicationRecord
self.abstract_class = true
...
end
# models/food/donut.rb
class Food::Donut < Food
...
end
在我所有使用 Food::Donut 的应用程序中都可以正常工作,除了在管理控制器中:
# controllers/manage/application_controller.rb
module Manage
class ApplicationController < Administrate::ApplicationController
...
end
end
# controllers/manage/tree_controller.rb
module Manage
class TreesController < Manage::ApplicationController
def some_method
Tree.cut # This works as intended
Food::Donut.eat # This fails with NameError: uninitialized constant Manage::Food::Donut
end
end
end
在控制台中,我通过定义 FoodDonut 设法“让它工作”:
FoodDonut = Food::Donut
module Manage
class FakeController
def fake_method
puts FoodDonut.eat # Works
puts Food::Donut.eat # fails
end
end
end
但在我的代码中这样做似乎会破坏所有其他控制器。
而且我不明白为什么对 Tree 有效,但对 Food::Donut 无效?
我对 ruby 还很陌生,如果有任何不清楚的地方请多多包涵。
【问题讨论】:
-
你有
Manage::Food的课吗?如果存在,Ruby 从Manage::FakeController开始查找并询问“是否有Manage::FakeController::Food?不。有Manage::Food吗?是的。好的,肯定有Manage::Food::Donut然后......不!好吧,那么这是一个错误”。 -
不,除了管理类中的控制器,我什么都没有。
标签: ruby-on-rails ruby