Tag: 数据库设计

validation在另一个表上具有条件时,数据库中的唯一性validation

当validation有条件但我的要求已经改变时,我在数据库中的唯一性validation中询问了类似的问题,因此这个问题。 当有多个进程时,在Rails中使用唯一性validation是不安全的,除非在数据库上也强制执行约束(在我的情况下是PostgreSQL数据库,所以请参阅http://robots.thoughtbot.com/the-perils-of-uniqueness-validations )。 在我的例子中,唯一性validation是有条件的:只有在另一个模型上的另一个属性变为真时才应该强制执行。 所以我有 class Parent < ActiveRecord::Base # attribute is_published end class Child < ActiveRecord::Base belongs_to :parent validates_uniqueness_of :text, if: :parent_is_published? def parent_is_published? self.parent.is_published end end 所以模型Child有两个属性: parent_id (与Parent关联)和text (文本属性)。 模型Parent有一个属性: is_published (布尔值)。 如果其parent.is_published为true,则所有类型为Child模型的text应该是唯一的。 使用http://robots.thoughtbot.com/the-perils-of-uniqueness-validations中建议的唯一索引太过限制,因为无论is_published的值如何,它都会强制执行约束。 是否有人知道PostgreSQL数据库上依赖于另一个表的“条件”索引? validation具有条件时,数据库中唯一性validation的解决方案是您的条件取决于同一个表上的属性。 还是另一种解决方法?

Rails:处理几个类似的模型类?

我正在建立一个课程申请系统。 高中,本科生和研究生都可以申请这门课程。 他们必须填写一些申请表。 但是,他们的信息表格相似,但不完全相同。 每个学生都有姓名,电话号码,电子邮件,地址等。但只有本科学生必须提供他们的GPA,研究生必须告诉他们正在研究哪个实验室。 还有其他微妙的差异…… 那我该怎么处理呢? 做一个大桌子,但留下高中生的’GPA’栏是否为空? 或者使用三个单独的表? 此外, Student (或在三个表格中, HighSchoolStudent , UndergraduateStudent和GraduateStudent )和其他模型之间存在某种关系。 例如, Course有很多Student , Student有很多Question ,等等。

是否有一个创建类似Twitter的追随者的gem,或者是一个微不足道的:has_many?

想知道是否有人想要类似Twitter的追随function,是否有gem? 我知道有一个处理“朋友”,但是只是简单地跟随has_many或者是否有一个有助于实现的gem(包括ajax / jquery部分?)

Rails中多个表单复选框的数据库结构

我有一个我正在研究的rails应用程序,允许用户创建日程安排。 在这样做时,他们应该能够选择一周中哪一天发生事件。 我计划在表单中执行此操作的方式是每个工作日旁边的复选框,如下所示: 等等… 但是,我发现这可能不是一种非常有效的处理方法,将每个日期作为布尔值存储在数据库中。 在’show’视图中​​显示日期非常困难; 我必须做点什么 Event Dates: Monday Tuesday Wednesday 这对我来说似乎不太理想。 我的另一个想法是在数据库中创建一个包含所有事件日期的字符串列,使用attr_accesors和一个模型方法来创建字符串after_create。 但是,在这种情况下,用户将如何编辑事件? 它让我思考,这里必须有一些我不了解的最佳实践(我以前从未试图用这种类型的结构创建东西)。 任何建议? 谢谢!

如何在Rails中为不同的用户建模

题 我有一个建立了授权和身份validation逻辑的用户模型。 现在我意识到我有三种不同类型的用户。 我想存储关于它们的不同信息。 在Rails中处理这个问题的最佳方法是什么? 基于当前阅读的思考 我看过STI但是从我读过的内容来看它是不合适的,因为我的数据库中会有很多NULL字段。 理想情况下,我不想为三种用户类型中的每一种复制身份validation/授权逻辑。 每个用户在应用程序中也将具有不同的function。

预约应用程序的DB模式:医生,约会,时间段,患者之间的正确关系是什么?

[更新的计划: http : //i.imgur.com/fX9CGNh.png ] 我的任务是开发一个专为小型医疗办公室设计的预约系统。 这是一个Rails 3.2应用程序。 我在设计一个对我有意义的数据库模式时遇到了困难。 问题: 鉴于以下信息,医生,患者,预约,椅子和时间段之间的正确关系是什么? 患者需要到医生办公室预约。 根据约会的类型,每个约会被安排为一个或多个相邻的time_slots,并且是否可以为具有相同start_time和end_time的time_slots安排两个约会由约会类型确定。 (根据约会类型允许双重预订。) 应用规格: 注册用户通过网站上的预约申请表进行预约。 约会占用相邻time_slots的某个预设量。 这由约会类别/类型决定。 管理员可以调整此长度,以及每个time_slot的长度。 为了帮助加快请求流程,在约会请求表单上的日历中隐藏了不可用/已预订的时间。 在面向管理员的界面上,管理员可以确认约会请求并进行预约,他们还可以更新,创建和删除预定约会。 所有约会都在“椅子”中举行 – 就像牙医的椅子一样。 办公室有多把椅子。 对于给定的预定时间段,每个椅子一名患者。 约会有日期,时间,长度约会类型,double_bookable的字段? (由appointment_type确定)。 Time_slots有一个start_time和end_time,以及一个日期。 这个办公室里只有一位医生。 但是,某些类型的约会 – 对文档的时间要求不高 – 可以加倍预订。 从本质上讲,可以在同一时间段预订两次牙齿清洁,只要它们被固定在**单独的椅子上**。 我的关系 : Office < ActiveRecord::Base has_many :doctors Doctor < ActiveRecord::Base has_many :patients belongs_to :offices Patient < ActiveRecord::Base belongs_to :doctor […]

与Rails / ActiveRecord的多态habtm关系

我将如何创建与Rails / ActiveRecord的多态has_and_belongs_to_many关系? 我看到的大多数示例都涉及创建belongs_to关系,该关系将我的多态性限制为仅与一个父级相关: 表:任务 表:Tasks_Targets 表:CustomerStore 表:SoftwareSystem 在这种情况下,CustomerStore和SoftwareSystem都将属于“Targetable”类型。 根据我的理解,如果我实现大多数示例所示的多态关系,我只能将Targetable与任务关联一次 。 一些澄清可能有所帮助,因为大多数在线搜索仍然留下这种关系背后的一些理论无法解释…… 谢谢!

我如何存储一个可以是部分的日期(即只是年份,也许也就是月份),并在以后以相同的指定方式输出它?

我想让用户指定一个日期,该日期可能包含也可能不包括日期和月份(但至少会包含年份。)问题是它在数据库中存储为日期时间; 缺失的日期/月将保存为默认值,我将丢失原始格式和日期的含义。 我的想法是除了datetime列之外还将实际格式作为字符串存储在列中。 然后,每当我必须显示其他所有内容的日期和日期时间时,我都可以使用字符串列。 缺点是我要显示的表中每个日期列的额外列,打印本地化日期不会那么容易,因为我不能依赖日期时间值……我可能要解析字符串。 我希望我忽略了一些东西,可能会有一种更简单的方法。 (注意我使用Rails,如果它对解决方案很重要。)

通知ala Facebook(数据库实施)

我想知道Facebook如何实现他们的通知系统,因为我正在寻找类似的东西。 FooBar评论了你的状态 Red1,Green2和Blue3对你的照片发表了评论 MegaMan和另外5人对您的活动发表了评论 我不能将多个通知写入单个记录,因为最终我将有与每个通知相关联的操作。 此外,在视图中,我希望当单个主题存在一定数量的通知时,通知将呈现为可扩展列表。 FooBar评论了你的状态(行动) Red1,Green2和Pink5对你的照片发表了评论[+] MegaMan和另外3人对您的活动发表了评论[ – ] MegaMan评论了你的活动(行动) ProtoMan评论了您的活动(行动) 巴斯评论了你的活动(行动) DrWilly评论了您的活动(行动) 干杯! PS我正在使用postgres和rails BTW。

多租户轨道应用:不同技术的优缺点是什么?

我最初为一个客户端编写了Ruby on Rails应用程序。 现在,我正在更改它,以便它可以用于不同的客户端。 我的最终目标是某些用户(不是我)可以单击按钮并创建新项目。 然后生成所有必要的更改(新模式,新表,代码处理),而无需任何人需要我编辑database.yml文件或添加新的模式定义。 我目前正在使用SCOPED访问。 所以我有一个项目模型,其他相关模型有一个project_id列。 我已经查看了有关Rails中多租户应用程序的其他post。 很多人似乎建议为Postgres中的每个新客户创建不同的架构。 但是,对于我来说,对于新客户端而言,在数据模型方面具有不同的模式并没有多大帮助。 每个客户端将具有相同的表,行,列等。 我对每个客户的愿景是我的生产数据库首先有一个不同项目/客户的表。 并且这些表中的每一个都链接到一组表,这些表对于不同的数据几乎相同。 换句话说,表格。 或者换句话说,第一个表将映射到具有相同结构的每个客户端的不同数据集。 我解释我的愿景的方式与Postgres实现不同“模式”的方式类似吗? 它看起来像嵌套表吗? 或者Postgres是否必须查询数据库中的所有信息? 我目前不使用Postgres,但我愿意学习它是否适合设计。 如果您知道使用适合我需求的Rails的数据库软件,请告诉我。 现在,我正在使用范围来完成多租户应用程序,但它不会感觉可扩展或干净。 但是,如果我给他们提供可填写的信息,它确实使非技术用户很容易创建新项目。 你是否知道在多用户模式Postgres定义是否可以让用户点击按钮后自动工作? 我希望这可以由Rails处理,如果可能的话不是由外部脚本处理? (请以任何方式提出建议) 最重要的是,您是否建议使用任何插件,或者我应该为此任务采用不同的框架? 我发现Rails在某些抽象情况下受到限制,这是我第一次遇到Rails扩展问题。 任何与多租户申请或我的情况有关的建议都是受欢迎的。 如有任何问题需要澄清或提供其他建议,也欢迎。 谢谢, – 戴夫