我正在为Spree编写扩展程序,我想删除现有的关联。
给出以下代码:
class Project < ActiveRecord::Base
has_one :status
...
end
如何在运行时删除对has_one :status
的调用?我想删除关联和相关方法。
答案 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的原因是在加载类时保持关联的评估。