所以我有一个模型(照片),当我调用Photo.new @image => @image
/时Photo.create :image => @image
,我希望我的模型找到具有相同图像哈希的现有照片,或者从@image 创建一张新照片。假设我不能使用Photo.find_or_initialize_by_hash
,因为我有一个自定义查找功能,它可以根据软图像哈希查找图像的紧密副本。
我的第一个想法是做
before_validation :check_duplicates, :on => :create
def check_duplicates
self = self.find_duplicate
end
不幸的是,我意识到你不能只在模型中重新定义 self,所以现在我认为最好的方法是按照将返回值从初始化更改为副本的方式来做一些事情。
有点像这样,但它不起作用(我听说过关于覆盖初始化的恐怖故事)
def initialize(*params)
super(*params)
return self.find_duplicate || self
end