has_many :through 或 has_and_belongs_to_many 或其他?
has_many :through or has_and_belongs_to_many or something else?
我有一个项目和用户模型
class Project < ActiveRecord::Base
belongs_to :proposer, class_name: "User", foreign_key: :user_id
end
class User < ActiveRecord::Base
has_many :projects
end
我希望有一个用户是项目提议者并拥有该项目。然后还有其他用户也拥有该项目。例如,User/proposer 将他们添加为所有者,但他们不是提议者。
我该如何建模?我目前只建立了proposer关系。这有点令人困惑,因为我仍在学习更高级的关联。
class Project < ActiveRecord::Base
has_many :users, :through => project_users
has_many :project_users
end
class User < ActiveRecord::Base
has_many :projects, :through => project_users
has_many :project_users
end
现在在您的 ProjectUser
table 和 user_id
和 project_id
中添加一个额外的列 role
。此角色字段将定义 user
角色,他是 提议者 还是通常只是 拥有 项目。
那么如果你想找到项目发起人,那么project.project_users.where(:role => 'proposer')
实际上我最终这样做了(不确定这是否是长期的好解决方案):
class Project < ActiveRecord::Base
belongs_to :proposer, class_name: "User", foreign_key: :user_id
has_many :propojectships
has_many :users, through: :projectships
end
class User < ActiveRecord::Base
has_many :projectships
has_many :projects, through: :projectships
has_many :projects
end
我有一个 join table Projectships 持有一个关系,然后我有一个直接外键,没有 join table 持有提议者关系。到目前为止它似乎有效。尽管我认为@Emu 的 above/below 解决方案更好,但如果我 运行 遇到任何问题,我可能会回来更改。
我有一个项目和用户模型
class Project < ActiveRecord::Base
belongs_to :proposer, class_name: "User", foreign_key: :user_id
end
class User < ActiveRecord::Base
has_many :projects
end
我希望有一个用户是项目提议者并拥有该项目。然后还有其他用户也拥有该项目。例如,User/proposer 将他们添加为所有者,但他们不是提议者。
我该如何建模?我目前只建立了proposer关系。这有点令人困惑,因为我仍在学习更高级的关联。
class Project < ActiveRecord::Base
has_many :users, :through => project_users
has_many :project_users
end
class User < ActiveRecord::Base
has_many :projects, :through => project_users
has_many :project_users
end
现在在您的 ProjectUser
table 和 user_id
和 project_id
中添加一个额外的列 role
。此角色字段将定义 user
角色,他是 提议者 还是通常只是 拥有 项目。
那么如果你想找到项目发起人,那么project.project_users.where(:role => 'proposer')
实际上我最终这样做了(不确定这是否是长期的好解决方案):
class Project < ActiveRecord::Base
belongs_to :proposer, class_name: "User", foreign_key: :user_id
has_many :propojectships
has_many :users, through: :projectships
end
class User < ActiveRecord::Base
has_many :projectships
has_many :projects, through: :projectships
has_many :projects
end
我有一个 join table Projectships 持有一个关系,然后我有一个直接外键,没有 join table 持有提议者关系。到目前为止它似乎有效。尽管我认为@Emu 的 above/below 解决方案更好,但如果我 运行 遇到任何问题,我可能会回来更改。