在父母和孩子以及祖父母和孩子之间设置模型(表)关联是不好的做法吗?例如,如果我想轻松查询用户的项目或用户的任务,是否建议进行以下设置?如果是这样,有没有一种好方法可以确保外键始终指向同一个用户?
非常感谢任何帮助。
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
答案 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了解更多详情
编辑:我已经假设(根据您的描述)一个任务属于一个项目,一个项目属于一个用户,并且该用户没有直接完成任务,而是通过项目。如果那是错的,请告诉我,我们会从那里弄清楚。