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

Ruby on rails 在Rails中以编程方式删除关联,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我正在为Spree编写一个扩展,我想删除一个现有的关联 def need_assoc eval <<-EOC class Project < ActiveRecord::Base has_one :status ... end EOC end 给定以下代码: class Project < ActiveRecord::Base has_one :status ... end class项目

我正在为Spree编写一个扩展,我想删除一个现有的关联

def need_assoc
  eval <<-EOC
    class Project < ActiveRecord::Base
    has_one :status
    ...
    end
  EOC
end
给定以下代码:

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

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

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

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

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

status.project_id = nil
status.save

把它删掉,只在你需要的时候再加上,怎么样

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

def need_assoc
  eval <<-EOC
    class Project < ActiveRecord::Base
    has_one :status
    ...
    end
  EOC
end
def需要协会

我不得不问。你为什么要这么做?好的一面是什么?也许这回答了你的问题: