質問: モデルで使用するscopeについて正しい理解をしたく、質問させていただきます。 今回、サイト内でプライベートメッセージの機能を作成したいと思っています。 従って、Conversationモデルとmessageモデルを作成しました。Conversationモデルは、 class_nameをUserとして、sender_idとrecipient_idというカラムを持っています。 それらが重複しないように、validates_uniqueness_ofを使い、以下のように書きました。 ``` validates_uniqueness_of :sender_id, :recipient_id ``` ところが、他の資料を見ると、scopeを使って、これを設定していました。 ``` validates_uniqueness_of :sender_id, :scope => :recipient_id ``` 結果は、同じなので問題はないのですが、どうして、scopeを使ったのだろうと気になってしまい、 調べたのですが、よくわかりません。 私の理解では、scopeをモデル内で使う場合は、SQL文をメソッド化し、controller内で使用する例は 馴染み深いのですが、上記のような使い方は初めてでした。 これはどのように理解すれば良いでしょうか? また、調べる際、どのようなキーワードで調べれば良いでしょうか?controllerなどで使うというよりも、 このモデル内で完結している処理のようです。 こちらはよくまとまっていたのですが、上記の使い方は乗っていなかったように思います。 https://www.sejuku.net/blog/26994
回答: `validates`に使う`scope`は、モデルのメソッドとしてSQL断片を定義する`scope`とは**無関係**で、「一意性チェックを制限するために使用される別の属性を指定するための」ものです(Rails Guide)。