所以我正在阅读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:
为我做了什么?
答案 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。