我正在开发一个专为分享故事而设计的网站,作为我学习 Ruby on Rails 的一部分。我已经设法完成了很多步骤,但我被困在如何跨模型的两个属性创建唯一约束。
我能够创建一个数据库级唯一性约束,这应该会有所帮助,但是“rails way”说我也需要在模型中创建它,数据库约束只是在并行问题的情况下的备份(经典的“用户双击按钮”场景)。
我的问题可以被认为等同于创建第二个主键,它恰好是对象中两个变量的组合。也就是说,我实际上对取代“自然”复合键并不感兴趣,实际上我很乐意将它留在原处。在大多数情况下,我更喜欢使用唯一 ID 来识别表中的每个对象。
也就是说,为了这个应用程序的目的,我需要一种方法来定义跨两列的唯一性约束。故事可以复制,章节编号也可以复制,但您永远不能为给定故事复制给定的章节编号。一个故事可以只有一个第一章。当然,仅仅因为它的编号并不意味着它的标题第一章; 这可能是序幕。或零章。管他呢。这个数字仅用于(或将在我达到那一步后)帮助创建一个“干净”的 url。我不介意storyID 相当高,或者对于给定的一组故事具有非顺序ID。没关系。但是我认为当他从故事的第一章转到第二章时,如果看到 url 从 story/1/chapter/32 变为 story/1/chapter 512,读者会感到困惑。
我试过这个:
validates [:story_id, :number], uniqueness:true
但它不起作用——它不能从数组中生成符号。所以我不知道从这里做什么。