对关联使用after_update

时间:2018-09-21 13:15:06

标签: ruby-on-rails activerecord callback

我有一个Artist链接到Board模型。我想设置一个after_update回调,以便对艺术家姓名的每次更新都按如下方式更改板子的名称:

after_update { self.board.update_attribute(:name, name: name) }

不幸的是,我收到此错误:

NoMethodError:
       undefined method `create' for nil:NilClass

我注意到,下降是与关联本身有关的。为什么会这样呢?值得的是,我还有一个after_create回调函数,它将默认创建一个木板:

after_create { board.create(name: self.name) }

class Artist < ApplicationRecord
  has_one :board, as: :boardable, dependent: :destroy

  after_create { board.create(name: self.name) }
  after_update { self.board.update_attribute(:name, name: name) }
end

1 个答案:

答案 0 :(得分:1)

创建关联板的方法是create_board(name: self.name),检查has_one https://guides.rubyonrails.org/association_basics.html#has-one-association-reference的引用

您可以为1 <-> N(具有has_many,has_many或has并属于许多)使用.create.build,但对于1 <-> 1则不能。