表单与回调函数的高级应用
1. 表单操作与持久化
在处理表单时,从 skip_user? 方法中删除嵌套表单后,需要考虑如何将这些更改持久化。当调用表单的 save 方法时,它会将所有属性同步回原始的 Thing 模型。例如:
thing.users = [#<User id: 1, email: "ryan@trb.org">]
这表明 Reform(实际上是 Disposable)会将嵌套表单的模型推送到集合写入器。由于删除了第二个嵌套表单,同步回模型的集合仅包含第一个作者。而 ActiveRecord 会自动处理剩下的工作,当使用新的、更小的集合更新 users 属性时,它会自动删除相应的作者关系。
2. 跳过现有用户
为了防止现有作者的信息被篡改,需要扩展跳过机制。虽然可以使用 :skip_if 选项,但由于无法在 lambda 中获取当前处理的项目索引,所以不能直接在 users 集合中使用。可以通过让现有用户的电子邮件字段变为只读来解决这个问题。代码如下:
collection :users, inherit: true, skip_if: :skip_user? do
property :email, skip_if: :skip_email?
def skip_email
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



