Rails中祖父母,父母和子女关系的数据建模

时间:2014-07-28 21:42:03

标签: ruby-on-rails database-design

在父母和孩子以及祖父母和孩子之间设置模型(表)关联是不好的做法吗?例如,如果我想轻松查询用户的项目或用户的任务,是否建议进行以下设置?如果是这样,有没有一种好方法可以确保外键始终指向同一个用户?

非常感谢任何帮助。

class User < ActiveRecord::Base
  attr_accessible :email, :first_name, :last_name

  has_many :projects
  has_many :tasks
end


class Project < ActiveRecord::Base
  attr_accessible :name, :status

  belongs_to :user
  has_many :tasks
end


class Task < ActiveRecord::Base
  attr_accessible :name, :status

  belongs_to :user
  belongs_to :project
end

1 个答案:

答案 0 :(得分:0)

您尝试做的事情没有任何问题,事实上rails已经预定了一些关联方法来帮助您。只需进行一些修改就可以了。

class User < ActiveRecord::Base
  attr_accessible :email, :first_name, :last_name

  has_many :projects
  has_many :tasks, through: :projects
end

现在将through: :projects添加到您的任务意味着您可以访问所有用户任务

$user = User.first #or whatever
$user.tasks 
=> [AR array of all tasks]

你可以在irb中玩它。此外,您在任务模型中不需要belongs_to :user。已经照顾好了。

Look at section 2.4了解更多详情

编辑:我已经假设(根据您的描述)一个任务属于一个项目,一个项目属于一个用户,并且该用户没有直接完成任务,而是通过项目。如果那是错的,请告诉我,我们会从那里弄清楚。