0

私は流動民主主義アプリに取り組んでいます。私のデータモデルは次のとおりです。

ユーザーと組織の両方が有権者です。投票者には、委任の順序付きリストがあります。委任は、タグのセットと投票者 (委任) の順序付きリストで構成されます。

どの投票者が代理として機能するかを決定するとき、一致するタグを持つ最初の委任が使用され、次に問題に投票したリスト内の最初の委任が使用されます。

委任の順序付きリストを作成するには、モデルにpositionフィールドを追加するだけです。その後、注文を管理するために使用できます。Delegationacts_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ため、ユーザーと組織の両方が更新されます。秩序が保たれているので、これは問題ですか?並べ替えや挿入を行うときに問題になる可能性があります。

4

1 に答える 1

0

最終的に、この構造は、単一セットの識別子を持つ単一テーブル継承に置き換えられたため、機能しacts_as_listます。

于 2014-09-10T14:26:49.777 に答える