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