Ruby on rails Rails 4:验证id或关联的存在性之间的差异
如果我在模型中有“属于”关联,我想知道验证关联之间的概念区别:Ruby on rails Rails 4:验证id或关联的存在性之间的差异,ruby-on-rails,validation,ruby-on-rails-4,model-associations,Ruby On Rails,Validation,Ruby On Rails 4,Model Associations,如果我在模型中有“属于”关联,我想知道验证关联之间的概念区别: class Topping < ActiveRecord::Base belongs_to :pancake validates :pancake, presence: true ... class-Topping
class Topping < ActiveRecord::Base
belongs_to :pancake
validates :pancake, presence: true
...
class-Topping
以及验证关联的模型id:
class Topping < ActiveRecord::Base
belongs_to :pancake
validates :pancake_id, presence: true
...
class-Topping
动机:
在过去的某个时候,一些为煎饼指定顶部的代码停止工作。将验证从关联更改为id“修复”了问题,但我想知道更深层次的原因
(仅供参考,当进入代码时,pancake是有效的,并且在数据库中,topping对
.pancake
和.pancake\u id
都做出了相应的响应。推送操作符(pancake.toppings进一步调查后,我发现“存在”验证器解析为“在空白上添加”:
这就是它所说的:如果相关属性为空白?
这意味着它只是一个存在性检查。因此,如果我验证一个id,该id必须存在。这意味着:
topping.pancake = Pancake.new
topping.valid?
将返回false。但是:
topping.pancake_id = -12
topping.valid?
将返回true。另一方面,如果我验证对象,则正好相反。除非-12是有效索引,否则在这种情况下,ActiveRecord将在收到“pancake”消息时自动从数据库加载它
继续讨论我的问题,进一步的调查显示,blank?
代表empty?
,确实有人在煎饼上定义了empty?
,如果没有配料,则返回true
罪魁祸首找到了,并了解了一些关于Rails的信息
topping.pancake_id = -12
topping.valid?