我有一个包含许多ListItem的List。
class List < ApplicationRecord
has_many :list_items
accepts_nested_attributes_for :list_items
class ListItem < ApplicationRecord
belongs_to :list
字符串
当我在ListItem上运行验证时,列表不会持久化在DB中。
list_id为nil。
如何验证(例如)列表是否有效,并将从ListItem验证中创建?
Rails 7.0.7
ListItem创建时已检查。
1条答案
按热度按时间uwopmtnx1#
在Rails中处理嵌套属性和关联时,可以遵循一些步骤来确保在验证和保存任何子记录(
ListItem
)之前持久化父记录(在本例中为List
)。以下是您如何实现这一点:
1.在
ListItem
模型中,添加验证以确保关联的List
对象有效:字符串
1.在
List
模型中,你可以在has_many
关联中使用inverse_of
选项。这告诉Rails这两个关联描述了相同的关系,但是从相反的Angular 。这有助于Rails在验证嵌套的ListItem
对象时识别内存中的List
对象:型
1.当你创建一个新的
List
及其嵌套的ListItem
对象时,确保你是在List
对象的基础上构建ListItem
对象的。这样,list_id
将为每个ListItem
正确设置:型
或者,如果您使用
accepts_nested_attributes_for
:型
通过执行这些步骤,您将确保在验证
ListItem
时,它也将验证其关联的List
。如果List
或其任何ListItem
对象无效,则不会将它们保存到数据库中。