2

我试图在rails 4上实现一个STI,但是我无法让它工作,我搜索了很多结果,但都没有工作。这里是问题:我有一个实例类,使用STI我有一个子类Car(一个虚拟子类)和ScheduledInstance类。Rails has_many STI

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 

当试图获得一个任务的汽车或任务的scheduledinstances,这是行不通的。(我对实例表型列)

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 
+0

我有投票最多只是标题 –

回答

2

我在想这个错误可能是由于文件命名。你能否确认您有:

# 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 
+0

它的工作!我以为我可以让他们在同一个文件中。谢谢:D – Gaston

0

我有几个建议:

你有没有尝试添加belongs_to :taskCarScheduledInstance模型?这可能需要您也添加对数据库的引用。

$ rails g migration add_task_id_to_car task:references 
$ rake db:migrate 

OR

您是否尝试过加入的查询?

@task = Task.joins(:instances, :cars, :scheducled_instances).first 
+0

添加belongs_to的:任务交给了汽车模型没有按没有工作。它不是已经有了(通过继承)吗? 第二个想法给我这个: NameError:未初始化的常量Task :: Scheduledinstance – Gaston

+0

只是'Task.joins(:instances).first.cars'? – Okomikeruko