2

Я пытаюсь реализовать STI на рельсах 4, но я не могу заставить его работать, я искал много результатов, но никто не работал. Вот проблема:Rails has_many 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 

При попытке получить автомобили Целевых в или scheduledinstances Целевого, она не работает. (У меня есть столбец типа на столе Instance)

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 :task к Car и ScheduledInstance модели? Это может потребовать, чтобы вы также добавляли ссылки на БД.

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

ИЛИ

Вы пробовали присоединиться на запрос?

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

добавления belongs_to: задача модели автомобиля Безразлично Не работай. Разве это уже не было (через наследование) ?. Вторая идея дает мне это: NameError: неинициализированная константа Задача :: Scheduledinstance – Gaston

+0

Как насчет 'Task.joins (: экземпляры) .first.cars'? – Okomikeruko

Смежные вопросы