【问题标题】:Can I disable touch for belongs_to association temporarily when I save a model?我可以在保存模型时暂时禁用 belongs_to 关联的触摸吗?
【发布时间】:2014-10-18 06:23:48
【问题描述】:

我有两个这样的模型:

class Topic < ActiveRecord::Base
  has_many :replies
end

class Reply < ActiveRecord::Base
  belongs_to :topic, touch: true
end

当我用reply.save! 保存回复时,主题上的touch 将被调用,主题上的updated_at 将更新为当前时间。

但有时我不想在创建回复时自动更改updated_at。那么,如何在保存回复时禁用touch

【问题讨论】:

标签: ruby-on-rails activerecord


【解决方案1】:

我建议明确的相反,仅在您想要的情况下触摸。对否定的测试将很快变得难以管理,并且可能很难被不熟悉代码的人接受。

您可以拨打topic.touch实现简单的触摸

【讨论】:

  • +1 从长远来看,您的模型中基于回调的自动行为较少,您会更快乐。而是尝试创建一个单一的业务逻辑方法来创建回复并在一个地方处理触摸或不触摸的逻辑。现在很多人为此使用所谓的“服务对象”,随机谷歌搜索文章:blog.engineyard.com/2014/…
【解决方案2】:

这是一个老问题,但如果您必须跳过接触记录并且您知道自己在做什么(迁移中的链接),您可以使用:

ActiveRecord::Base.no_touching do
  Project.first.touch  # does nothing
  Message.first.touch  # does nothing
end

从这里:https://api.rubyonrails.org/classes/ActiveRecord/NoTouching/ClassMethods.html#method-i-no_touching

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多