我有一个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
答案 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则不能。