モデル User と Event の間のこのような関係をモデル化したいと思います。
したがって、私は次のクラスから始めました。
class User < ActiveRecord::Base
...
end
class Attendance < ActiveRecord::Base
# with columns user_id and event_id
...
end
class Event < ActiveRecord::Base
has_many :attendances
has_many :users, :through => :attendances
...
end
これまでのところ、すべて問題ありません。ユーザーを割り当てて出席にアクセスできます。しかし今、私は、例えば「出席」、「無断欠席」、... ユーザーを区別できるように、状態を活用したいと考えています。私の最初の試みは:
class Event < ActiveRecord::Base
has_many :attendances
has_many :users, :through => :attendances
has_many :unexcused_absent_users, -> { where :state => 'unexcused' },
:through => :attendances,
:source => :user
...
end
(:source を指定しないと、'unexcused_absent_users' という名前のアソシエーションに属するものを検索するため、指定する必要があります) ここでの問題は、where-述語がテーブル 'users' で評価されることです。
すべての状態に新しい結合テーブル/モデルを導入せずに、これを「正しく」解決する方法がわかりません。特に、すべてのユーザーがイベントごとに 1 つの状態になる可能性があるため、1 つの出席モデルによるソリューションが理にかなっていると思います。
これを正しくする方法はありますか?