观察者和回调函数对于accepts_nested_attributes_for没有触发

4

我有一个模型Topic和Post。Topic has_many:posts。

在Topic模型中,我还有accepts_nested_attributes_for:posts,

当使用一些参数更新Topic时,似乎Post模型的观察器和回调都不会被触发。这是一个错误还是一个特性?


当然,我以前使用过那个观察者,用于常规模型更新,而不是通过嵌套属性。 - Artur79
你应该同时发布你的观察者代码。 - m_x
2
你确定你的 Topic 模型中 attr_accessible 中有 :posts_attributes 吗? - alony
1
尝试启动Rails控制台并保存或更新Post。观察者是否运行? - twmills
嗯...你说得对,我这里也有同样的问题。是功能还是Bug?我本来以为回调函数会被触发的。 - Macario
显示剩余3条评论
2个回答

0
当您运行update_attributes方法时,在嵌套资源上或不是,只有在资源已更改且通过验证时才保存该资源。如果没有通过验证,则不保存资源,并且after_update未触发。

0

我不确定你所说的"当更新帖子时使用一些参数来更新主题"是什么意思,但是只有在更新帖子对象时,Post回调才会运行。

也就是说,以下情况会触发回调:

@post.update_attributes(:topics_attributes => [...])

...但这不会:

@topic.update_attributes(:post_id => 123, ...)

如果您想在主题更新时触发Post after_update回调,可以执行以下操作:
# topic.rb
after_update :touch_post
private
def touch_post
  post.touch
end

观察者代码的行为类似于回调函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接