Ruby on rails 添加关联回调后的Rails未触发

Ruby on rails 添加关联回调后的Rails未触发,ruby-on-rails,Ruby On Rails,在我的模型中,我包含以下行: has_many :notes, as: :notable, dependent: :destroy, after_add: :create_informal_note 当我创建一个与上面这行所在的模型关联的注释时,我希望create\u非正式的\u note方法会启动 但是,该方法没有被激发 这里怎么了 潜在问题: 该注释是通过对POST/api/v1/notes的HTTP请求创建的。在请求主体的JSON中,它包括值得注意的\u id和值得注意的\u类型。它设置

在我的模型中,我包含以下行:

has_many :notes, as: :notable, dependent: :destroy, after_add: :create_informal_note
当我创建一个与上面这行所在的模型关联的注释时,我希望create\u非正式的\u note方法会启动

但是,该方法没有被激发

这里怎么了

潜在问题:

该注释是通过对POST/api/v1/notes的HTTP请求创建的。在请求主体的JSON中,它包括值得注意的\u id和值得注意的\u类型。它设置的是实际字段,而不是对象

POST /api/v1/notes

{
  "note": {
    "text": "Test note",
    "notable_id": 1,
    "notable_type": "AnotherModel"
  }
}
以及运行Rails web服务器的输出日志:

Processing by NotesController#create as JSON
  Parameters: {"note"=>{"notable_id"=>"1", "notable_type"=>"AnotherModel", "text"=>"Test note", "email"=>1, "documents_attributes"=>nil}}
   (0.2ms)  BEGIN
  SQL (2.0ms)  INSERT INTO `notes` (`text`, `notable_id`, `notable_type`, `created_at`, `updated_at`) VALUES ('Test note', 1, 'AnotherModel', '2016-02-19 11:32:56.401216', '2016-02-19 11:32:56.401216')
   (1.1ms)  COMMIT

Rails是否会忽略关联,因此回调不会因此触发?

此回调仅在通过添加关联时起作用此回调仅在通过添加关联时起作用可能值得向未来的读者指出,此功能记录在活动记录文档中:


值得向未来的读者指出的是,此功能记录在Active Record文档中:


你的方法看起来像这个create_unformal_notenote吗?你是否在测试中确认了一个新的关联已经被添加,并且没有因为某种原因而失败?是的,def create_unformal_notenote是的,我已经验证了关联是否存在。可能是因为它是多态的吗?检查我的编辑,让我知道你的想法。看看。他们说,只有在向集合中添加对象时才会触发此回调。您的方法是否类似于此create_unformal_notenote?您是否在测试中确认了一个新关联已添加,并且它没有因为某种原因而失败?是的,def create_unformal_notenote是的,我已经验证了该关联是否存在。可能是因为它是多态的吗?检查我的编辑,让我知道你的想法。看看。他们说,只有在将对象添加到集合中时才会触发此回调。通常,在为他们发布之前,您希望让人们先发布回答问题的注释作为答案。如果几天后他们没有回复,或者他们说没问题,你可以自己发布,但让他们先发布被认为是一种好形式。如果你发布了,最好是包含完整的答案,而不是引用上面的评论。请包含到该主题的链接以及其中的相关部分。@QPaysTaxes,访问原始海报的最佳方式是什么?我对stackoverflow比较陌生-我看不到一种方式来给海报留言,也不允许我对其他人的答案发表评论。啊,我的错,我没有注意到你的代表率低。一旦你有了50,你就可以发表评论了。在那之前,你可以根据评论自由地写答案,只要你信任评论作者并对其进行扩展。一般来说,你会希望让人们先发表评论,回答问题作为答案,然后再为他们发表评论。如果几天后他们没有回复,或者他们说没问题,你可以自己发布,但让他们先发布被认为是一种好形式。如果你发布了,最好是包含完整的答案,而不是引用上面的评论。请包含到该主题的链接以及其中的相关部分。@QPaysTaxes,访问原始海报的最佳方式是什么?我对stackoverflow比较陌生-我看不到一种方式来给海报留言,也不允许我对其他人的答案发表评论。啊,我的错,我没有注意到你的代表率低。一旦你有了50,你就可以发表评论了。在那之前,你可以根据评论自由地写下答案,只要你相信评论作者并加以扩展。
# These callbacks are called only when the associated objects 
# are added or removed through the association collection:


# Triggers `before_add` callback
author.books << book
author.books = [book, book2]

# Does not trigger the `before_add` callback
book.update(author_id: 1)