【问题标题】:Make has_many :through not deleteable使 has_many :through 不可删除
【发布时间】:2015-01-29 15:00:31
【问题描述】:

我在我的连接模型上使用了一个活动标志,而不是删除它们。如何指定一个条件来防止销毁这些条目?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-2


    【解决方案1】:

    最好在表中创建一个新字段,并将其命名为 is_deleted,数据类型为布尔值。然后更新它而不是破坏数据。

    【讨论】:

      【解决方案2】:

      你应该覆盖你的模型中的destroy方法。

      可以在这里找到类似的解决方案:https://stackoverflow.com/a/9333524/4416209

      【讨论】:

        【解决方案3】:

        您也可以使用paranoia gem。这将使用 deleted_at 时间戳进行软删除,并添加必要的条件来过滤掉“已删除”记录。

        如果您想保持活动列,您可以阅读源代码以获得灵感。基本上它只是为包括它在内的任何类添加一个默认范围,并用以下方式替换destroy:

         def destroy
           transaction do
             run_callbacks(:destroy) do
               touch_paranoia_column
             end
           end
         end
        

        那么

        touch_paranoia_column
        

        你可以使用

        update_attribute(:active, true)
        

        希望这对您有所帮助。

        【讨论】:

          猜你喜欢
          • 2015-07-31
          • 2014-06-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-30
          • 2019-03-04
          相关资源
          最近更新 更多