gpt4 book ai didi

ruby-on-rails - Accept_nested_attributes_for 子关联验证失败

转载 作者:行者123 更新时间:2023-12-03 05:23:20 24 4
gpt4 key购买 nike

我在我的 Rails 模型之一中使用accepts_nested_attributes_for,并且我想在创建父级后保存子级。

表单工作正常,但验证失败。为简单起见,请想象以下内容:

class Project < ActiveRecord::Base
has_many :tasks
accepts_nested_attributes_for :tasks
end

class Task < ActiveRecord::Base
belongs_to :project

validates_presence_of :project_id
validates_associated :project
end

我正在运行:

Project.create!(
:name => 'Something',
:task_attributes => [ { :name => '123' }, { :name => '456' } ]
)

保存项目模型后,任务验证失败,因为它们没有project_id(因为项目尚未保存)。

Rails 似乎遵循以下模式:

  • 验证项目
  • 验证任务
  • 保存项目
  • 保存任务

模式应该是:

  • 验证项目
  • 通过:保存项目并继续...
  • 验证任务
    • 通过:保存任务
    • 失败时:删除项目(也许回滚?)

所以我的问题归结为:在保存父级(项目)之后,如何让Rails运行project_id=(或project=)方法并在子级(任务)上进行验证,但不保存父级(项目)模型是否有任何子(任务)无效?

有什么想法吗?

最佳答案

使用:inverse_ofvalidates_presence_of :parent。这应该可以解决您的验证问题。

   class Dungeon < ActiveRecord::Base
has_many :traps, :inverse_of => :dungeon
end

class Trap < ActiveRecord::Base
belongs_to :dungeon, :inverse_of => :traps
validates_presence_of :dungeon
end

http://apidock.com/rails/ActiveModel/Validations/HelperMethods/validates_presence_of

https://github.com/rails/rails/blob/73f2d37505025a446bb5314a090f412d0fceb8ca/activerecord/test/cases/nested_attributes_test.rb

关于ruby-on-rails - Accept_nested_attributes_for 子关联验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/935650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com