嘿,我目前正在开发一个集Spree和Refinery于一体的项目。 Spree建议使用他们称之为装饰器的方式进行许多修改:
Refinery::Page.class_eval do
def autocomplete_label
title
end
attr_accessible :spree_taxon_id
has_one :spree_taxon
end
这很好用。但是,只是打开课程和直接添加方法之间的区别是什么?
class Refinery::Page
def autocomplete_label
title
end
attr_accessible :spree_taxon_id
has_one :spree_taxon
end
我可以理解,第一个可以在直到运行时才知道类时使用(这个用例不需要)。还有其他差异吗?
答案 0 :(得分:2)
我能想到的唯一区别是第一个版本会导致它autoload现有的Page类,然后你的代码会在加载后添加。如果该类尚未加载,并且您使用第二个版本,则可能会干扰Spree和Refinery期望的自动加载行为,并且该类可能无法正确加载。
答案 1 :(得分:0)
如果您使用Spree建议的类装饰器模式,那么您的更改将通过升级Gem来实现。如果您选择将方法直接添加到类定义中,那么在您更新宝石时它们就会丢失。