[英]How do I create a model with many fields on rails? Two fields should have options to choose from
[英]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.