これを試しています
@user.orders.of(:some_type).for_today
ビジネスルールによると、ユーザーは1日に任意のタイプの単一の注文を行うことができ、これはコールバックなどを通じて適用されます。私はfor_today
それが単一のオブジェクトを返すことを望んでいることを知っています。for_today
つまり、スコープが配列ではなく単一のオブジェクトを返すようにしたいということです。ただし、以下のすべてが配列を返します
1
scope :of, lambda{ |type| where(:order_type => type) }
scope :for_today, where(" created_at BETWEEN ? AND ? ", Date.today, Date.tomorrow)
2
scope :of, lambda{ |type| where(:order_type => type) }
scope :for_today, where(" created_at BETWEEN ? AND ? ", Date.today, Date.tomorrow).limit(1)
3
scope :of, lambda{ |type| where(:order_type => type) }
scope :for_today, where(" created_at BETWEEN ? AND ? ", Date.today, Date.tomorrow).first
first
その後、コードで他のオプションが再度呼び出されることはありません
@user.orders.of(:some_type).for_today.first
開発者は彼女が最初のレコードをフェッチしていることを知るようになるので、それは正しい方法だと思います。これはより理にかなっています。そうでなければ、配列または単一オブジェクトを返すかどうかを推測する方法がありません。しかし、それでも、私のビジネスルールを考慮すると、for_today
単一のオブジェクトを返す必要があると予想されるため、知りたいのですが、単一のオブジェクトを返すことを通知する方法があるscope
ので、配列を使用してパッケージ化しないでください。