自家製のRESTAPIを使用して新しいデータを挿入するRails3.2.8アプリケーションに取り組んでいます。挿入ロジックはすべてのエンドポイントで一般的であり、Model.saveを呼び出すだけで済みます。
モデルタイプの1つについて、最初に既存のレコードが存在するかどうかを確認し、存在する場合は、挿入ではなく更新します。コードでコントローラーレベルでの対話が許可されている場合、これはfind_or_create_byを使用することで簡単になりますが、(私が思うに)唯一のオプションは、モデルのsaveメソッドをオーバーライドするか、before_saveコールバックを使用することです。
モデル内でsaveまたはupdate_attributesを呼び出すと、(明らかな理由で)無限ループが発生するため、これを機能させる方法を見つけるのに苦労しています。
before_saveを利用する方法、または属性xとyを持つレコードが存在するかどうかを最初に確認できるようにsaveをオーバーライドする方法はありますか?存在する場合は、そのレコードを取得して更新を実行します。それ以外の場合は、標準のActiveRecord保存を使用しますか?
これが現在Activityモデル内にある私のコードですが、無限ループの問題のために機能しません:
def save
a = UserActivity.find_or_initialize_by_user_id_and_activity_id(user_id: user_id, activity_id: activity_id)
a.update_attributes start_at: start_at, end_at: end_at.....
end