Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4:验证id或关联的存在性之间的差异_Ruby On Rails_Validation_Ruby On Rails 4_Model Associations - Fatal编程技术网

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?