【问题标题】:Is it really needed to validate foreign keys?真的需要验证外键吗?
【发布时间】:2012-10-31 23:13:03
【问题描述】:

我正在使用 Ruby on Rails v3.2.2,在发布我的 previous question 后,我想知道并了解是否(或不)显式验证与 ActiveRecord::Associations 相关的外键是需要的。例如:

class CategoryAssociation < ActiveRecord::Base
  belongs_to :article, :foreign_key => 'article_id'
  belongs_to :category, :foreign_key => 'category_id'

  validates :article_id, :presence => true, :numericality => { :only_integer => true }
  validates :category_id, :presence => true, :numericality => { :only_integer => true }
end

以上validates 方法真的需要吗?为什么?

【问题讨论】:

  • 关联只有在描述现有文章和类别时才有意义。您需要这些约束来保持数据库的一致性。将文章与“无”关联有什么意义?
  • @Tom - 我应该明确 说明验证方法吗(正如我在问题中所做的那样)?

标签: ruby-on-rails ruby validation activerecord associations


【解决方案1】:

我不会像你那样做,但我会做:

validates_presence_of :article, :category

我不确定它是否绝对必要,但这会阻止您仅保存部分关联。在正常的 Rails 使用中很难创建部分关联,但这样就不会发生。

另外,你不需要foreign_key 在这些关联中,只是

belongs_to :article, :category

【讨论】:

  • 这不会给应用程序增加一些严重的开销吗?在 db 级别添加约束不是更好吗?
  • 这取决于您的应用程序以及您如何定义严重的开销。如果这是面向用户的,并且用户一次对几条记录进行 CRUD,这不会增加可衡量的影响。如果您作为管理员一次处理一百万条记录,这可能是有意义的开销。但是,如果您以管理员的身份一次处理一百万条记录,那么您可能一开始就不应该在应用程序代码中执行此操作。
猜你喜欢
  • 2014-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
  • 2015-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多