私は流動民主主義アプリに取り組んでいます。私のデータモデルは次のとおりです。
ユーザーと組織の両方が有権者です。投票者には、委任の順序付きリストがあります。委任は、タグのセットと投票者 (委任) の順序付きリストで構成されます。
どの投票者が代理として機能するかを決定するとき、一致するタグを持つ最初の委任が使用され、次に問題に投票したリスト内の最初の委任が使用されます。
委任の順序付きリストを作成するには、モデルにposition
フィールドを追加するだけです。その後、注文を管理するために使用できます。Delegation
acts_as_list
私が確信していないのは、デリゲートのリストをどのように構成するかです。データベースの列は次のようになります。
delegation_id
delegate_type
delegate_id
position
私の現在の刺し傷は次のとおりです。
class User < ActiveRecord::Base
has_and_belongs_to_many :organizations
has_many :delegations, as: :voter
acts_as_tagger
acts_as_voter
end
class Organization < ActiveRecord::Base
has_and_belongs_to_many :users
has_many :delegations, as: :voter
acts_as_tagger
acts_as_voter
end
class Delegation < ActiveRecord::Base
belongs_to :voter, polymorphic: true
has_many :tags
has_and_belongs_to_many :delegation_entries, -> { order("position ASC") }
acts_as_list scope: :voter
end
class DelegationEntry < ActiveRecord::Base
belongs_to :delegation
acts_as_list scope: :delegation
end
Organization.first.delegations << Delegation.create
コンソールから行うと、次のように表示されます。
(0.4ms) BEGIN
Delegation Load (1.0ms) SELECT "delegations".* FROM "delegations" WHERE ("delegations"."voter_id" IS NULL AND position > 1) ORDER BY delegations.position ASC LIMIT 1
SQL (0.7ms) UPDATE "delegations" SET position = (position + 1) WHERE ("delegations"."voter_id" = 1 AND position >= 1)
そのため、acts_as_list
どうやらポリモーフィックな関連付けを処理しません。増分は にのみ適用されるid
ため、ユーザーと組織の両方が更新されます。秩序が保たれているので、これは問題ですか?並べ替えや挿入を行うときに問題になる可能性があります。