我有一个会议模型、视图和控制器。每次会议,我都要记录俱乐部成员的出席情况。每次会议还与一个锦标赛相关联。
在我看来,最理想的做法是,每个会议条目都存储Tournament_id和每个Member_id的出席情况。但是,如果您要这样做,则需要为member_id设置动态列长度(每个成员一列),该长度可能会有所不同。
1.这可能吗?
1.如果这不是最佳方法,那么存储数据的最佳方法是什么?
目前,我有它的每个Meeting.id存储1成员的出席和形式推出所有成员的1个给定的锦标赛和复选框为他们的出席。但是,我不完全理解这是如何工作,我不能想出如何轻松地编辑成员的出席方式。
我从here得到了我当前功能的部分解决方案,但我试图找出是否有另一种方法让它完全工作。
谢谢
1条答案
按热度按时间s5a0g9ez1#
在我看来,最理想的做法是每个会议条目都存储Tournament_id和每个Member_id的出席情况。但是,如果您要这样做,则需要为member_id设置动态列长度(每个成员一列),该长度可能会有所不同。
**完全没有。**这不是一个在关系数据库中建模数据的可行解决方案,因为模式将完全不可维护,并且您将以大量几乎全部包含空值的列结束。SQL查询也将非常疯狂。
相反,您需要考虑包含每个成员的唯一数据的表中的每一行。在数据库设计中,这对应于First Normal Form的概念。
这是一个简单的示例,说明了如何跟踪出席情况 *:
这里
attendences
是一个包含成员和会议ID的连接表,我们在成员和会议之间有多对多的关联。然后,您可以使用rails表单帮助器从集合中创建复选框,并使用
has_many :members, through: :attendences
创建的member_ids
setter / getter:在控制器中,您可以将
member_ids
列列入白名单,该列包含一个散列键,值为空数组:这将允许一个允许的标量值的数组,如id列表。