【问题标题】:Remove an association programmatically in Rails在 Rails 中以编程方式删除关联
【发布时间】:2010-12-29 00:00:43
【问题描述】:

我正在为 Spree 编写扩展程序,我想删除现有的关联。

给定以下代码:

class Project < ActiveRecord::Base
  has_one :status
  ...
end

如何在运行时删除对has_one :status 的调用?我想删除关联和关联的方法。

【问题讨论】:

标签: ruby-on-rails ruby activerecord


【解决方案1】:

不幸的是,这是一个相当复杂的 DSL 调用,它为类添加了许多方法,您必须删除所有这些方法,这可能不值得。

创建一个新的 CleanProject 类可能更容易,使用组合或继承向其中添加一个 Project 对象,然后只传递对 Project 所需部分的调用。

另一方面,如果您要询问如何删除与该项目相关联的状态(不是删除状态与项目相关的事实,而只是从单个项目中删除单个状态),您会只需调用:

status.project_id = nil
status.save

【讨论】:

    【解决方案2】:

    将其省略并仅在需要时添加呢?

    也许您只需要在设计为从 cronjob 或批处理执行的方法中使用的类中的关联?然后您可以评估代码以引入关联。

    def need_assoc
      eval <<-EOC
        class Project < ActiveRecord::Base
        has_one :status
        ...
        end
      EOC
    end
    

    使用 eval 的原因是为了防止在加载类时评估关联。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多