Rails has_many 性病
Rails has_many STI
我试图在 rails 4 上实施 STI,但我无法让它工作,我搜索了很多结果但 none 工作。问题是:
我有一个实例 class,使用 STI 我有一个 subclass Car(一个虚拟 subclass)和 ScheduledInstance class.
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
当试图获取任务的汽车或任务的预定实例时,它不起作用。(我在实例 table 上有一个类型列)
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 through 一起使用?
class Project < ActiveRecord::Base
has_many :tasks, dependent: :destroy
has_many :instances, through: :tasks
end
我有几个建议:
您是否尝试过将 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
我认为错误可能是由于文件命名造成的。你能确认你有:
# 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
我试图在 rails 4 上实施 STI,但我无法让它工作,我搜索了很多结果但 none 工作。问题是:
我有一个实例 class,使用 STI 我有一个 subclass Car(一个虚拟 subclass)和 ScheduledInstance class.
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
当试图获取任务的汽车或任务的预定实例时,它不起作用。(我在实例 table 上有一个类型列)
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 through 一起使用?
class Project < ActiveRecord::Base
has_many :tasks, dependent: :destroy
has_many :instances, through: :tasks
end
我有几个建议:
您是否尝试过将 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
我认为错误可能是由于文件命名造成的。你能确认你有:
# 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