gpt4 book ai didi

ruby-on-rails - Ruby on Rails - 使用需要此记录的嵌套关联保存新记录

转载 作者:行者123 更新时间:2023-12-04 02:13:12 25 4
gpt4 key购买 nike

我在以干净的方式创建具有嵌套关联的新记录时遇到问题。这是 Controller 代码:

@listing = current_user.listings.build(params[:listing].permit(ATTRIBUTES_FOR_CREATE))

这会构建一个具有多个嵌套关联的实体,如下所示:

class ListingDataField < ActiveRecord::Base
belongs_to :listing
validates_presence_of :listing
end

但是,当我在 Controller 中执行 @listing.save 时,我在那些“列表不能为空”的嵌套 ListingDataField 实体上收到验证错误。如果我理解正确,AutosaveAssociation 首先验证并保存嵌套关联,并最终保存顶级实体。因此,它无法验证 ListingDataField,因为列表尚未保存。

但我认为在 ListingDataField 中进行 :listing 验证是正确的,所以我不会考虑删除它。我可以看到 2 个解决方案:

  1. 在事务中——保存Listing记录,然后构建嵌套关联一个接一个
  2. @listing.save(:validate => false) 但这太丑了

两者都没有 current_user.listings.build(...) 优雅,所以我的问题是 - 正确的 Rails 方法是什么?

附言我搜索了类似的问题,但我找不到任何问题,希望这不是重复的:)

最佳答案

你试过添加:

class ListingDataField < ActiveRecord::Base
belongs_to :listing, inverse_of: :listing_data_fields
validates :listing, presence: true
end

class Listing < ActiveRecord::Base
has_many :listing_data_fields, inverse_of: :listing
end

这应该可以验证存在性。

关于ruby-on-rails - Ruby on Rails - 使用需要此记录的嵌套关联保存新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36488842/

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