`
cjyzpcl
  • 浏览: 33932 次
  • 性别: Icon_minigender_1
  • 来自: Charlotte
社区版块
存档分类
最新评论

Many-to-Many relationship的实际应用(1)

阅读更多

需求:场景如下,user可以是多个group的会员,管理者和创建者。group有1个创建者,多个管理者和多个会员。

解决方案:

建立数据库:

sql 代码
  1. CREATE TABLE `groups` (   
  2.   `id` int(11) NOT NULL auto_increment,   
  3.   `namevarchar(32) NOT NULL,   
  4.   `url` varchar(250) NOT NULL,   
  5.   `description` varchar(100) default NULL,   
  6.   `logo` int(11) NOT NULL,   
  7.   `created_time` datetime NOT NULL,   
  8.   PRIMARY KEY  (`id`)   
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;   
  10.   
  11. CREATE TABLE `users` (   
  12.   `id` int(11) NOT NULL auto_increment,   
  13.   `logo` int(11) NOT NULL,   
  14.   `namevarchar(25) NOT NULL,   
  15.   `sex` int(11) NOT NULL,   
  16.   `birthday` datetime NOT NULL,   
  17.   `location` varchar(100) NOT NULL,   
  18.   `hashed_password` varchar(40) NOT NULL,   
  19.   PRIMARY KEY  (`id`)   
  20. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;   
  21.   
  22. CREATE TABLE `members` (   
  23.   `id` int(11) NOT NULL,   
  24.   `user_id` int(11) NOT NULL,   
  25.   `group_id` int(11) NOT NULL,   
  26.   `priviledge` varchar(10) default NULL,   
  27.   PRIMARY KEY  (`id`)   
  28. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  

 注意members这个表中的priviledge属性,priviledge属性有3个选择(creator, admin, leaguer),分别代表user在group中的3种身份权限。

model代码:

ruby 代码
  1. class Member < ActiveRecord::Base   
  2.   belongs_to :group  
  3.   belongs_to :user  
  4. end  
  5.   
  6. class User < ActiveRecord::Base   
  7.   has_many :members  
  8.   has_many :groups,   
  9.     :through => :members,   
  10.     :order => "priviledge desc"  
  11. end  
  12.   
  13. class Group < ActiveRecord::Base   
  14.   has_many :members  
  15.   has_many :users,   
  16.     :through => :members  
  17.   has_many :creators,           
  18.     :through => :members,   
  19.     :source => :user,   
  20.     :conditions => ["priviledge = 'creator'"]   
  21.   has_many :admins,   
  22.     :through => :members,   
  23.     :source => :user,   
  24.     :conditions => ["priviledge = 'admin'"]   
  25.   has_many :leaguers,   
  26.     :through => :members,   
  27.     :source => :user,   
  28.     :conditions => ["priviledge = 'leaguer'"]   
  29. end  

 这里注意的是

ruby 代码
  1. has_many :creators,           
  2.     :through => :members,   
  3.     :source => :user,   
  4.     :conditions => ["priviledge = 'creator'"]  

 

不能用has_one来替代,所以替代的方法就是在Group里面加上如下代码:

ruby 代码
  1. def creator   
  2.     creators[0]   
  3. end  

这样可以使用Group#creator来得到管理员。

如下代码为测试代码:

ruby 代码
  1. group = Group.find(2)   
  2. user = User.find(1)   
  3. member = Member.create(:group_id => group, :user_id => user, :priviledge => "admin")  
分享到:
评论
1 楼 cjyzpcl 2007-07-20  
发表文章时间更新。

相关推荐

    Hibernate-Many-to-many-Relationship-in-Spring-MVC:展示如何在 Spring MVC HIbernate 项目中建立多对多关系的示例项目

    总之,"Hibernate-Many-to-many-Relationship-in-Spring-MVC"项目提供了一个完整的实例,演示了如何在实际应用中设置和操作多对多关系。通过学习和理解该项目,开发者可以更好地理解和运用Spring MVC和Hibernate在...

    many-to-many-through:这是使用has_many的许多示例教程

    $ 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-one-to-many-relationship

    本主题主要关注的是如何在Play框架中处理"1对多"(One-to-Many)的关系,这是一种常见的数据库关系模型,通常用于描述一个实体与多个相关实体之间的联系。 在给定的场景中,"产品目录"可能是一个包含各种产品的...

    Relationship

    - **n:1 (Many-to-One)**:多个子对象可以与一个父对象相关联。 - **m:n (Many-to-Many)**:多个父对象可以与多个子对象相关联。 **3. 关键特性** - **Cardinality**:定义每个参与关系的要素类可以有多少个关联,...

    系统管理中的实体ER图1

    * 实体之间的关系:需要定义实体之间的关系,包括One-To-One、One-To-Many、Many-To-Many等关系类型。 * 实体的规范化:需要对实体进行规范化,以确保实体之间的关系正确且简洁。 系统管理中的实体ER图1是系统管理...

    My Java web ....!

    webwork exercise struts2 exercise ORM:one-to-many,many-to-many,self-relationship RoR exercise later... 博文链接:https://riss.iteye.com/blog/81513

    SSD7 选择题。Multiple-Choice

    (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 ...

    RESTApp

    • 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 model

    在本章中,我们不仅介绍了ER模型的基本概念,还通过一个具体的案例——Country Bus Company——展示了如何构建ER模型,并讨论了在实际应用中可能遇到的问题及其解决策略。这有助于读者更好地掌握ER模型的设计与应用...

    超媒体API原型框架Fortune.js.zip

     // One-to-many relationship of post author to user posts.  author: { link: 'user', inverse: 'posts' } }) store.connect().then(() =&gt; server.listen(1337)) 标签:Fortune

    many2many指定某行不删除

    many2many指定某行不删除

    hibernate的多对多案例

    -- Many to many relationship with Course --&gt; &lt;many-to-many column="courseId" class="com.example.Course"/&gt; &lt;!-- Course mapping --&gt; &lt;!-- Many to many relationship with Student --&gt; ...

    ArcSDE table relationship

    1. **一至一**(One-to-One):一个表中的每个记录只与另一个表中的一个记录相匹配。 2. **一至多**(One-to-Many):一个表中的一个记录可与另一个表中的多个记录相匹配。 3. **多至一**(Many-to-One):多个记录...

    addin

    to-Many Wizard &lt;BR&gt; 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....

    数据库课件总结:Database Chapter Six Outline.docx

    对于二元关系集来说,映射基数约束可以是一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)或多重关系(Many-to-Many)。 ### E-R 图 文档还提到了用于可视化表示实体、关系及属性的工具——...

    使用PowerDesigner画ER图详细教程.docx

    此外,在 PowerDesigner 中还可以定义实体之间的联系,例如 one-to-one、one-to-many、many-to-many 等关系类型。这些关系类型可以用来描述实体之间的关联关系,例如学生和课程之间的关系。 使用 PowerDesigner ...

    第二章答案1

    数据库设计是信息系统开发的核心部分,它涉及到数据组织、存储和管理的方式。在这一章的答案中,我们探讨了数据库...理解并熟练应用这些术语有助于我们在实际数据库开发中做出明智的决策,以满足业务需求和性能目标。

Global site tag (gtag.js) - Google Analytics