所以我有一個模型(照片),當我打電話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