Rails,如何在has_one关系中触摸更新?

时间:2017-10-10 17:42:34

标签: ruby-on-rails activerecord

所以我正在阅读touch here的文档,看起来touch: true只能放在belongs_to关系上。但是,在我的世界中,我希望触摸的对象是has_one关联。

我的数据模型:

class Tool
   has_one :product, as: :producible, inverse_of: :producible
end

class Product
    belongs_to :producible, polymorphic: true
end

所以我想要的是每次更新工具时,product也会更新。怎么做到这一点?我似乎无法使用touch: true

此外,as:inverse_of:为我做了什么?

2 个答案:

答案 0 :(得分:2)

这是一篇很好的文章,解释inverse_of的使用:https://www.viget.com/articles/exploring-the-inverse-of-option-on-rails-model-associations

如果您要查看touch关联模型,可以将其添加到工具类中:

after_save :touch_product

private
def touch_product
  product.update_column(:updated_at, Time.now) if product.present?
end

这实际上和touch一样。它将更新产品记录中的时间戳,而无需实例化对象或运行任何回调。如果您有兴趣进一步阅读https://apidock.com/rails/ActiveRecord/Persistence/touch

,可以在此处找到touch方法的源代码。

答案 1 :(得分:0)

从 Rails 6+ 开始,getServerCertificates() 开始在关联中支持 has_one

相关提交 here