【问题标题】:Using after_update with associations将 after_update 与关联一起使用
【发布时间】:2018-09-21 13:15:05
【问题描述】:

我有一个链接到 Board 模型的 Artist。我想设置一个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

【问题讨论】:

    标签: ruby-on-rails activerecord callback


    【解决方案1】:

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

    你可以为 1N 使用 .create.build(通过 has_many、has_many 或拥有并属于许多),但对于 11 你不能。

    【讨论】:

    • 所以如果我理解正确的话,我的方法创建了一个板,但实际上并没有通过 boardable 参考,这反过来导致after_update 回调不起作用?不管怎样,感谢您的帮助。
    • @CarlEdwards,您遇到的错误是在创建过程中。您实际上根本没有创建任何板。在创建时,self.board 的值为 nil,因此您实际上调用了 nil.create
    • 太棒了。谢谢你的澄清。
    猜你喜欢
    • 2019-12-27
    • 1970-01-01
    • 2014-03-20
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 2017-04-07
    相关资源
    最近更新 更多