Ruby on rails 真的需要验证外键吗?
我正在使用RubyonRailsV3.2.2,在我的文章之后,我想知道并理解是否需要(或不需要)显式验证与Ruby on rails 真的需要验证外键吗?,ruby-on-rails,ruby,validation,activerecord,associations,Ruby On Rails,Ruby,Validation,Activerecord,Associations,我正在使用RubyonRailsV3.2.2,在我的文章之后,我想知道并理解是否需要(或不需要)显式验证与ActiveRecord::Associations相关的外键。例如: class CategoryAssociation < ActiveRecord::Base belongs_to :article, :foreign_key => 'article_id' belongs_to :category, :foreign_key => 'category_id'
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
class CategoryAssociation“article\u id”
属于:category,:foreign\u key=>“category\u id”
验证:article_id,:presence=>true,:numericality=>{:only_integer=>true}
验证:category_id,:presence=>true,:numericality=>{:only_integer=>true}
结束
上述
验证方法是否确实需要?为什么?我不会像你那样做,但我会:
validates_presence_of :article, :category
我不确定这是否绝对必要,但这使您无法仅保存部分关联。在正常的rails使用中很难创建部分关联,但这样就不会发生
此外,您不需要在这些关联中的任何一个上使用外键
,只要
belongs_to :article, :category
关联只有在描述现有文章和类别时才有意义。您需要这些约束来保持数据库的一致性。把一篇文章和“什么都没有”联系起来有什么意义呢?@Tom-我应该明确地说明验证方法吗(正如我在问题中所说的)?这不会给应用程序增加一些严重的开销吗?在db级别添加约束不是更好吗?这取决于你的应用程序和你如何定义严重的开销。如果这是面向用户的,并且用户一次只能处理几个记录,那么这不会增加可测量的影响。如果你作为一名管理员一次处理一百万条记录,那么这可能是一项有意义的开销。但是,如果你作为一名管理员一次要做一百万条记录,那么你可能不应该在应用程序代码中首先做这件事。