RubyonRails-使用需要此记录的嵌套关联保存新记录



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

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

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

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

然而,当我在控制器中执行@listing.save时,我会在那些嵌套的ListingDataField实体上收到"列表不能为空"的验证错误。如果我理解正确的话,AutosaveAssociation首先验证并保存嵌套的关联,最后保存顶级实体。因此,它无法验证ListingDataField,因为尚未保存Listing。

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

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

两者都不如current_user.listings.build(...)那么优雅,所以我的问题是——Rails对此的正确方式是什么?

附言:我在SO中搜索了类似的问题,但没有找到,希望这不是重复的:)

您是否尝试添加:

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

这应该使存在的验证工作。

相关内容

  • 没有找到相关文章

最新更新