我了解Rails的理念认为数据完整性检查应该在应用程序级别而不是数据库级别进行。像许多其他开发人员一样,我非常不同意。
我发现了很多关于这个问题的讨论,但它们似乎都过时了,并且令人沮丧的是,它们似乎指向了不同的解决方案。
我想象中,在Rails 3中有一种事实标准的处理外键约束的方式。然而,无论它是什么(如果它确实存在),似乎都被所有过去的讨论所淹没,因为我找不到它。
截至目前,Rails开发人员是否大多对外键约束达成共识?如果是这样,我很想知道它们通常是如何处理的。
我了解Rails的理念认为数据完整性检查应该在应用程序级别而不是数据库级别进行。像许多其他开发人员一样,我非常不同意。
我发现了很多关于这个问题的讨论,但它们似乎都过时了,并且令人沮丧的是,它们似乎指向了不同的解决方案。
我想象中,在Rails 3中有一种事实标准的处理外键约束的方式。然而,无论它是什么(如果它确实存在),似乎都被所有过去的讨论所淹没,因为我找不到它。
截至目前,Rails开发人员是否大多对外键约束达成共识?如果是这样,我很想知道它们通常是如何处理的。
def self.up
execute <<EOS
create table .... (
....
);
EOS
end
http://guides.rubyonrails.org/migrations.html#active-record-and-referential-integrity
尽管Active Record没有提供直接处理此类功能的工具,但可以使用execute方法来执行任意SQL。还有许多插件,例如foreign_key_migrations,可将外键支持添加到Active Record中。
前几天我也问了同样的问题,所以我做了一些研究,并将我的发现整理在一个较旧但类似的Stack Overflow问题的答案中。希望对你有用。
顺便说一下,当你说你“热情地反对”数据完整性检查应该在应用程序级别而不是数据库级别进行时,我想你的意思是它们应该在两个级别进行,而不仅仅是在数据库中。我希望我正确地认为几乎每个人都同意在应用程序级别进行完整性检查是一件好事,唯一争论的话题是它们是否应该另外在数据库中进行。
<<-EOS
形式的heredoc呢?这样你就不需要将所有内容对齐到第0列了。 - noodl