Rails更接受的是什么?
验证创建/更新
上是否存在外键或
当我们想要使用不存在的外键时,“损害控制”?
初始验证需要更多关于行创建/更新的资源,当我在我的代码中系统地创建行时(即不是用户生成的),甚至可能是多余的。但是,我可以顺利地编写我的业务逻辑,而不用担心遇到坏的外键。
另一方面,损坏控制允许快速创建和更新,但当然,我的逻辑中还有更多的检查和恢复。
你能想到其他任何优点和缺点吗?也许除了这两种学说之外,还有更多的选择。
经验丰富的Rails开发人员如何处理这个问题?
答案 0 :(得分:1)
如果提前验证你的意思是做一个额外的数据库请求只是为了验证一个密钥的存在,我会说不要这样做。我们全部使用FK,并且几乎从未遇到过问题,特别是在创建或更新时。如果确实失败了,那可能是一件好事,不像验证你可以做些什么,如果你只是试图为不再存在的对象添加一个关联,那对我来说似乎是一个很好的理由。
如果您有特别不稳定的实体,以致实例可能经常在实例化之间被删除,并且您尝试将其保存在FK中,那么也许在特定情况下它可能是值得的,但是一般指南我不会。
我还经常在使用逻辑删除删除的表之间使用FK(la acts_as_paranoid,设置deleted_at标志而不是实际删除行),这也简化了FK失败的问题,我发现这是非常有帮助的策略至少在我的应用程序中。