需求:场景如下,user可以是多个group的会员,管理者和创建者。group有1个创建者,多个管理者和多个会员。
解决方案:
建立数据库:
sql 代码
- CREATE TABLE `groups` (
- `id` int(11) NOT NULL auto_increment,
- `name` varchar(32) NOT NULL,
- `url` varchar(250) NOT NULL,
- `description` varchar(100) default NULL,
- `logo` int(11) NOT NULL,
- `created_time` datetime NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
- CREATE TABLE `users` (
- `id` int(11) NOT NULL auto_increment,
- `logo` int(11) NOT NULL,
- `name` varchar(25) NOT NULL,
- `sex` int(11) NOT NULL,
- `birthday` datetime NOT NULL,
- `location` varchar(100) NOT NULL,
- `hashed_password` varchar(40) NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
- CREATE TABLE `members` (
- `id` int(11) NOT NULL,
- `user_id` int(11) NOT NULL,
- `group_id` int(11) NOT NULL,
- `priviledge` varchar(10) default NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
注意members这个表中的priviledge属性,priviledge属性有3个选择(creator, admin, leaguer),分别代表user在group中的3种身份权限。
model代码:
ruby 代码
- class Member < ActiveRecord::Base
- belongs_to :group
- belongs_to :user
- end
-
- class User < ActiveRecord::Base
- has_many :members
- has_many :groups,
- :through => :members,
- :order => "priviledge desc"
- end
-
- class Group < ActiveRecord::Base
- has_many :members
- has_many :users,
- :through => :members
- has_many :creators,
- :through => :members,
- :source => :user,
- :conditions => ["priviledge = 'creator'"]
- has_many :admins,
- :through => :members,
- :source => :user,
- :conditions => ["priviledge = 'admin'"]
- has_many :leaguers,
- :through => :members,
- :source => :user,
- :conditions => ["priviledge = 'leaguer'"]
- end
这里注意的是
ruby 代码
- has_many :creators,
- :through => :members,
- :source => :user,
- :conditions => ["priviledge = 'creator'"]
不能用has_one来替代,所以替代的方法就是在Group里面加上如下代码:
ruby 代码
- def creator
- creators[0]
- end
这样可以使用Group#creator来得到管理员。
如下代码为测试代码:
ruby 代码
- group = Group.find(2)
- user = User.find(1)
- member = Member.create(:group_id => group, :user_id => user, :priviledge => "admin")
分享到:
- 2007-07-14 13:27
- 浏览 1774
- 评论(1)
- 论坛回复 / 浏览 (1 / 2472)
- 查看更多
相关推荐
总之,"Hibernate-Many-to-many-Relationship-in-Spring-MVC"项目提供了一个完整的实例,演示了如何在实际应用中设置和操作多对多关系。通过学习和理解该项目,开发者可以更好地理解和运用Spring MVC和Hibernate在...
$ rails new many - to - many $ cd many - to - many $ bundle install $ rails server $ rails generate scaffold Staff full_name : string position : string $ rails generate scaffold Client full_name : ...
本主题主要关注的是如何在Play框架中处理"1对多"(One-to-Many)的关系,这是一种常见的数据库关系模型,通常用于描述一个实体与多个相关实体之间的联系。 在给定的场景中,"产品目录"可能是一个包含各种产品的...
- **n:1 (Many-to-One)**:多个子对象可以与一个父对象相关联。 - **m:n (Many-to-Many)**:多个父对象可以与多个子对象相关联。 **3. 关键特性** - **Cardinality**:定义每个参与关系的要素类可以有多少个关联,...
* 实体之间的关系:需要定义实体之间的关系,包括One-To-One、One-To-Many、Many-To-Many等关系类型。 * 实体的规范化:需要对实体进行规范化,以确保实体之间的关系正确且简洁。 系统管理中的实体ER图1是系统管理...
webwork exercise struts2 exercise ORM:one-to-many,many-to-many,self-relationship RoR exercise later... 博文链接:https://riss.iteye.com/blog/81513
(b) The number of integrity constraints required to implement the relationship (c) The number of attributes that characterize the relationship (d) The number of entities that participate in the ...
• At least one Many-to-Many relationship. • Optimized to third normal form (3NF). • At least one column of the following types: INTEGER, VARCHAR, DATE, REAL. Web服务详细信息 所有数据库交互均作为Web...
在本章中,我们不仅介绍了ER模型的基本概念,还通过一个具体的案例——Country Bus Company——展示了如何构建ER模型,并讨论了在实际应用中可能遇到的问题及其解决策略。这有助于读者更好地掌握ER模型的设计与应用...
// One-to-many relationship of post author to user posts. author: { link: 'user', inverse: 'posts' } }) store.connect().then(() => server.listen(1337)) 标签:Fortune
many2many指定某行不删除
-- Many to many relationship with Course --> <many-to-many column="courseId" class="com.example.Course"/> <!-- Course mapping --> <!-- Many to many relationship with Student --> ...
1. **一至一**(One-to-One):一个表中的每个记录只与另一个表中的一个记录相匹配。 2. **一至多**(One-to-Many):一个表中的一个记录可与另一个表中的多个记录相匹配。 3. **多至一**(Many-to-One):多个记录...
to-Many Wizard <BR> The Many-to-Many Add-In provides a way for developers to quickly and easily create forms that can be used to populate the junction table of a many-to-many table relationship....
对于二元关系集来说,映射基数约束可以是一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)或多重关系(Many-to-Many)。 ### E-R 图 文档还提到了用于可视化表示实体、关系及属性的工具——...
此外,在 PowerDesigner 中还可以定义实体之间的联系,例如 one-to-one、one-to-many、many-to-many 等关系类型。这些关系类型可以用来描述实体之间的关联关系,例如学生和课程之间的关系。 使用 PowerDesigner ...
数据库设计是信息系统开发的核心部分,它涉及到数据组织、存储和管理的方式。在这一章的答案中,我们探讨了数据库...理解并熟练应用这些术语有助于我们在实际数据库开发中做出明智的决策,以满足业务需求和性能目标。