在Rails中以编程方式删除关联

时间:2009-12-22 05:53:57

标签: ruby-on-rails ruby activerecord

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

给出以下代码:

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

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

2 个答案:

答案 0 :(得分:0)

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

创建一个新类CleanProject可能更容易,使用组合或继承向它添加一个Project对象,然后只调用你想要的Project部分的调用。

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

status.project_id = nil
status.save

答案 1 :(得分:-1)

如何将它留在外面,只在需要时添加它?

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

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

使用eval的原因是在加载类时保持关联的评估。