繁体   English   中英

在Ruby on Rails中,如何告诉模型应该具有覆盖两个不同字段的唯一约束?

[英]In Ruby on Rails, how do I tell a model that it should have a unique constraint covering two different fields?

我正在一个旨在共享故事的网站上工作,这是我学习Ruby on Rails的一部分。 我已经设法完成了很多步骤,但是我仍然坚持如何在模型的两个属性之间创建唯一约束。

我能够创建数据库级别的唯一性约束,这应该会有所帮助,但是“铁路方式”说,我也需要在模型中创建该约束,在发生并行性问题时,数据库约束只是一个备份(经典的“用户双击按钮”方案)。

我的问题可以被认为等同于创建第二个主键,该键恰好是对象中两个变量的组合。 就是说,我实际上对取代“自然的”复合键不感兴趣,并且实际上对保留它很满意。 在大多数情况下,我更喜欢使用唯一的ID来识别表中的每个对象。

就是说,出于这个应用程序的目的,我需要一种方法来定义两列之间的唯一性约束。 故事可以重复,章节号可以重复,但是您永远不能为给定的故事重复给定的章节号。 有一个故事可以有一个且只有一个章节之一。 当然,仅仅因为它是第一名并不意味着它就被命名为第一章。 这可能是序幕。 或零章。 管他呢。 此数字仅用于(或将在我到达之后使用)帮助创建“干净”网址。 我不介意storyID很高,或者给定的一组故事都具有非顺序ID。 没关系。 但是我认为,当他从一个故事的第一章转到第二个故事时,看到URL从story / 1 / chapter / 32到story / 1 / chapter 512会使读者感到困惑。

我尝试了这个:

validates [:story_id, :number], uniqueness:true

但这是行不通的-它无法从数组中生成符号。 所以我不知道该怎么办。

validates :number, uniqueness: {scope: [:story_id]}

这将对具有story_id范围的数字执行唯一性验证。 这意味着对于给定的story_id,您的号码将是唯一的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM