ruby on rails-嵌套属性无法使用新的父级创建子级



我有两种型号:

class Shift < ActiveRecord::Base
  attr_accessible :ranges_attributes
  has_many :ranges
  accepts_nested_attributes_for :ranges, allow_destroy: true
end
class Range < ActiveRecord::Base
  belongs_to :shift
  validates :shift, presence: true
end

当在我的控制器中,我想用我得到的范围创建一个偏移时:

Shift.create! params[:shift]
#ActiveRecord::RecordInvalid Exception: Validation failed: Shift ranges shift can't be blank

如果我从Range模型中删除validates :shift, presence: true,这将非常有效。我可以和他的孩子们一起创造一个新的转变。ActiveRecord为我做这件事。

问题是:为什么我需要删除该验证才能使其工作

像这样验证父级存在的问题是计时!!实际上Shift还没有保存,所以当尝试创建嵌套的ranges时,它在数据库中找不到父Shift

我在这里找到了这个解决方法

class Shift < ActiveRecord::Base
  attr_accessible :ranges_attributes
  has_many :ranges, :inverse_of => :shift
  accepts_nested_attributes_for :ranges, allow_destroy: true
end

我引用了来自同一来源的(略有修改):

使用此选项时,rails不会尝试从数据库获取父项验证子项。父对象将从内存中获取。如果你不这样做熟悉这个选项,我强烈建议你阅读官方导轨

相关内容

  • 没有找到相关文章

最新更新