我有一个限制性架构(即架构已经有空限制和最大长度等)。将所有这些都放在模型中也会过度使用并适得其反吗?...
validates :CouponID, :presence => true,
:numericality => true
validates :MerchantName, :presence => true,
:length => { :maximum => 100 }
validates :MerchantID, :presence => true,
:numericality => true
validates :Network, :length => { :maximum => 20 }
validates :Label, :presence => true
validates :CouponCode, :length => { :maximum => 100 }
validates :EndDate, :presence => true
validates :Link, :presence => true
validates :Status, :presence => true,
:length => { :maximum => 45 }
validates :Country, :length => { :maximum => 100 }
答案 0 :(得分:4)
不,这不是一种矫枉过正。将这些放入验证器中,您的模型将允许Rails在将它们插入数据库之前捕获它们。这也是很好的设计和实践。
如果省略这些,则会引发MySQL错误。
例如。假设我有一个Comment
模型,其中包含一个名为body
的属性字符串,在我的表中不能为零。
class Comment < ActiveRecord::Base
end
如果我尝试过:
comment = Comment.create(body: nil)
我会得到以下异常。
ActiveRecord::StatementInvalid: Mysql2::Error: Column 'body' cannot be null:
这很糟糕。应用程序的自然流动会破裂。
但是,如果我将验证器放在我的模型中就像这样
class Comment < ActiveRecord::Base
validates :body, presence: true
end
并尝试了以下内容:
comment = Comment.create(body: nil)
我不会抛出异常但我的变量的errors
数组告诉我出了什么问题。
comment.errors.full_messages
=> ["Body can't be blank"]
将验证器放入模型并进行良好设计是一种很好的做法。