我试图在 Rails 4 上实现 STI,但我无法使其工作,我搜索了很多结果但没有成功。问题是这样的:
我有一个实例类,使用 STI 我有一个子类 Car(虚拟子类)和 ScheduledInstance 类。
class Instance < ActiveRecord::Base
belongs_to :task
end
class Car < Instance end
class ScheduledInstance < Instance end
class Task < ActiveRecord::Base
has_many :instances, dependent: :destroy
has_many :cars
has_many :scheduledinstances
end
当尝试获取任务的汽车或任务的计划实例时,它不起作用。(我在实例表上有一个类型列)
Task.first.cars
Task Load (0.8ms) SELECT "tasks".* FROM "tasks" ORDER BY "tasks"."id" ASC LIMIT 1
NameError: uninitialized constant Task::Car
但是,如果我先执行 Task.first.instances,然后执行 Task.first.cars,则它可以正常工作。我缺少什么?
另外,根据您的回答,我需要进行哪些更改才能使其与 has_many 一起使用?
class Project < ActiveRecord::Base
has_many :tasks, dependent: :destroy
has_many :instances, through: :tasks
end
最佳答案
我认为错误可能是由于文件命名造成的。您能否确认您拥有:
# models/car.rb
class Car < Instance
end
# models/scheduled_instance.rb
class ScheduledInstance < Instance
end
然后在你的task.rb中,你应该有:
class Task < ActiveRecord::Base
has_many :instances, dependent: :destroy
has_many :cars
has_many :scheduled_instances
end
关于ruby-on-rails - Rails has_many STI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38256161/