![](/img/trans.png)
[英]activerecord where not nil in has_one and has_many relationship
[英]ActiveRecord has_one relationship alongside a has_many relationship
我正在努力与ActiveRecord建立特定的关系模型。 我目前有以下设置和工作
class Schedule < ActiveRecord::Base
has_many :tasks
end
class Task < ActiveRecord:Base
belongs_to :schedule
end
具有如下所示的数据库结构:
schedules
- integer:id
tasks
- integer:id
- integer:schedule_id
我想做的是,通过向Schedules表中添加“ active_task_id”列,将任务之一设置为计划的活动任务:
schedules
- integer:id
- integer:active_task_id
tasks
- integer:id
- integer:schedule_id
我正在努力的是如何在ActiveRecord类中对此进行描述
似乎最好使用属性而不是创建单独的ID。 也许您的任务可能有一个名为active
的布尔列,那么可以通过以下命令找到计划的活动任务:
@schedule.tasks.select {|t|t.active?}
或者,您可以创建命名范围来完成相同的事情。
应该看起来像这样
class Schedule < ActiveRecord::Base
has_many :tasks
belongs_to :active_task,
:class_name => 'Task',
:foreign_key => 'active_task_id'
end
class Task < ActiveRecord:Base
belongs_to :schedule
has_one :relevant_schedule,
:class_name => 'Schedule',
:foreign_key => 'active_task_id'
end
概念上棘手的部分是定义“ relevant_schedule”关系。 在大多数情况下,这并不是真正需要的(即,您编写的代码将不会使用),而这对于ORM的完整性是必需的。
您不太可能想要使用task.relevant_schedule
(在许多情况下为nil),您可能大多希望在代码中使用schedule.active_task
。
'relevant_schedule'只是一个任意名称,您可以选择其他任何喜欢的名称。 :class_name和:foreign_key必须与数据库和模型名称完全匹配。 也许可以完全省略“ relevant_schedule”定义。 我不确定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.