ruby-on-rails - Rails has_many STI

标签 ruby-on-rails ruby-on-rails-4 has-many single-table-inheritance sti

我试图在 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/

相关文章:

ruby-on-rails - Carrierwave 仅将图像保存为 Production-env 中的 tmp

ruby-on-rails - 回形针 - 错误的图像方向

ruby-on-rails - Rails,has_many :through, 未定义方法 `to_sym` 为 nil:NilClass

ruby-on-rails - 如何使用 ActiveAdmin Ruby gem 修改表单 url?

ruby-on-rails - ror - 在 has_many 和 belongs_to 的两端包含外键?

ruby-on-rails - 如何计算在 ROR 的特定字段中具有唯一值的记录数?

sql - 报告一组记录的分组平均值

ruby-on-rails-3 - has_many 返回一个数组而不是 ActiveRecord 类

ruby-on-rails - 是否可以在模型中创建条件关联?

ruby-on-rails - 用于创建同一模型的多个条目的 Rails Form