2

Ich habe versucht, eine STI auf Schienen 4 zu implementieren, aber ich kann es nicht funktionieren lassen, ich habe viele Ergebnisse gesucht, aber keine funktionierte. Hier ist das Problem:Schienen has_many STI

Ich habe eine Instanz-Klasse, mit STI Ich habe eine Unterklasse Car (eine Dummy-Unterklasse) und ScheduledInstance-Klasse.

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 

Beim Versuch, eine Autos Aufgabe oder eine scheduledinstances Aufgabe zu bekommen, es funktioniert nicht. (I eine Art Spalte Instanz Tabelle haben)

Task.first.cars 
    Task Load (0.8ms) SELECT "tasks".* FROM "tasks" ORDER BY "tasks"."id" ASC LIMIT 1 
NameError: uninitialized constant Task::Car 

jedoch, wenn ich Task.first tun .instances und dann Task.first.cars, es funktioniert in Ordnung. Was ich vermisse?

Auch basierend auf Ihrer Antwort, welche Änderungen muss ich anwenden, damit es mit einer has_many funktioniert?

class Project < ActiveRecord::Base 
    has_many :tasks,  dependent: :destroy 
    has_many :instances, through: :tasks 
end 
+0

ich für den Titel nur stimmen musste –

Antwort

2

Ich denke, der Fehler kann aufgrund der Dateinamen sein. Können Sie bestätigen, dass Sie haben:

# models/car.rb 
class Car < Instance 
end 

# models/scheduled_instance.rb 
class ScheduledInstance < Instance 
end 

Dann in Ihrem task.rb, sollten Sie haben:

class Task < ActiveRecord::Base 
    has_many :instances,   dependent: :destroy 
    has_many :cars 
    has_many :scheduled_instances 
end 
+0

hat es funktioniert !. Ich dachte, ich könnte sie in der gleichen Datei haben. Danke: D – Gaston

0

Ich habe ein paar Vorschläge:

Haben Sie versucht belongs_to :task den Car und ScheduledInstance Models hinzufügen? Dazu müssen Sie möglicherweise auch Referenzen zur Datenbank hinzufügen.

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

ODER

Haben Sie auf der Abfrage versucht beizutreten?

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

Hinzufügen belongs_to: Aufgabe dem Auto Modell doesn arbeite nicht. Hatte es nicht schon (durch die Erbschaft)? Die zweite Idee gibt mir das: NameError: nicht initialisierte Konstante Aufgabe :: ScheduledInstance – Gaston

+0

Was ist mit nur 'Task.joins (: Instanzen) .first.cars'? – Okomikeruko