所以我有一个模型(照片),当我打电话Photo.new @image => @image
/Photo.create :image => @image
时,我想让我的模型找到具有相同图像散列的现有照片,或者从@图片。假设我不能使用Photo.find_or_initialize_by_hash
,因为我有一个自定义查找功能,可以根据软图像散列查找图像的密切副本。新/创建ActiveRecord模型的自定义返回值
我的第一个想法是做
before_validation :check_duplicates, :on => :create
def check_duplicates
self = self.find_duplicate
end
不幸的是,我意识到,你不能只是重新定义自己的模型,所以现在我认为最好的办法是沿着改变返回值的行做的事情从初始化到重复。
有点像这一点,但它不工作(我听说过覆盖初始化恐怖故事)
def initialize(*params)
super(*params)
return self.find_duplicate || self
end
这将在Objective-C的工作,而不是在Ruby的:)恕我直言,你最好的镜头是重新定义Photo.find_or_initialize_by_hash方法。 – Roman 2011-04-15 16:26:59