提问人:Betjamin Richards 提问时间:10/9/2023 更新时间:10/10/2023 访问量:37
accepts_nested_attributes_for和after_remove
accepts_nested_attributes_for and after_remove
问:
我有一个这样的模型
class Post < ApplicationRecord
has_many :comments,
after_add: :soil,
after_remove: :soil,
dependent: :destroy
attr_accessor :soiled_associations
accepts_nested_attributes_for :comments, allow_destroy: true
def soil(record)
self.soiled_associations = [record]
end
end
当我在视图中添加一个新的对象时,它会将对象添加到我的属性中(顺便说一句,我试图命名一个自定义方法,该方法的作用类似于 Rails 的类,但用于关联)。comment
post.soiled_associations
soiled_associations
Dirty
但是,当我删除视图中的注释时,不会向属性添加任何内容。post.soiled_associations
我做错了什么?我怀疑这与工作原理有关(也许绕过这些回调),但任何人都可以对此有所了解吗?accepts_nested_attributes_for
答:
1赞
Alex
10/10/2023
#1
无法告诉你你做错了什么,因为你没有表现出你在做什么。但只有几种方法可以做到这一点:
>> Post.new(comments_attributes: [{}]).soiled_associations
=> [#<Comment:0x00007f01e99a30c0 id: nil, post_id: nil>]
>> Post.create(comments_attributes: [{}]).soiled_associations
=> [#<Comment:0x00007f01e9a08fd8 id: 3, post_id: 2>]
>> post = Post.last
>> post.comments.destroy_all
>> post.soiled_associations
=> [#<Comment:0x00007f01e99867e0 id: 3, post_id: 2>]
>> Post.create(comments_attributes: [{}])
>> post = Post.last
>> post.update(comments_attributes: [{id: 4, _destroy: true}])
>> post.soiled_associations
=> [#<Comment:0x00007f01e99a5500 id: 4, post_id: 3>]
评论
0赞
Betjamin Richards
10/11/2023
对不起,我应该提供更多信息,但你的回答让我找到了解决方案。谢谢。
评论
self.soiled_associations ||= []; self.soiled_associations.push(record)