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