Итак, у меня есть модель (Фото), где, когда я звоню 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
К сожалению, я понял, что вы не можете просто переопределить себя в модели, поэтому теперь я думаю, что лучший подход - это сделать что-то вроде изменения возвращаемого значения от инициализации до дубликата.
Вроде как, но это не работает (и я слышал ужасные истории о переопределении инициализации)
def initialize(*params)
super(*params)
return self.find_duplicate || self
end