0

わかりました、この奇妙さをチェックしてください。私には、リーダーとフォロワーの 2 種類のユーザーがいます (それぞれには、私が入りたくない神の愛を喜ばせる理由で独自のサブクラスがあり、さらに、この議論には関係ありません)。

class Admin < Account
  has_many :leader_follower_relationships, foreign_key: :leader_id, dependent: :destroy
  has_many :followers, through: :leader_follower_relationships
end

class Follower < Account
  has_one :follower_leader_relationship, class_name: "LeaderfollwerRelationship",
      dependent: :destroy
  has_one :leader, through: :follower_leader_relationship
end

class LeaderFollowerRelationship < ActiveRecord::Base
  belongs_to :follower, class_name: "Follower", foreign_key: :artist_id
  belongs_to :leader, class_name: "Admin", foreign_key: :leader_id
end

とにかく、has_one を使用して関係を確立することはできますが、更新することはできません。

follower1.leader = leader1
  (0.3ms)  BEGIN
  Account Exists (1.1ms)  SELECT 1 AS one FROM "accounts" WHERE "accounts"."auth_token" IS NULL LIMIT 1
  Account Exists (0.4ms)  SELECT 1 AS one FROM "accounts" WHERE "accounts"."email_address" = 'leader1@example.com' LIMIT 1
  SQL (0.6ms) ...
  (0.5ms)  COMMIT

follower1.leader = leader2
  (0.3ms)  BEGIN
  (1.8ms)  UPDATE "leader_follower_relationships" SET "leader_id" = 3 WHERE     "leader_follower_relationships"."" IS NULL
  (0.2ms)  ROLLBACK
  ActiveRecord::StatementInvalid: PGError: ERROR:  zero-length delimited identifier at     or near """"
  LINE 1: ...ader_id" = 3 WHERE "leader_follower_relationships"."" IS NULL

フォロワーが (has_many を使用して) 多くのリーダーを持つことができる場合、作成と更新の両方を行うことができます。

class Follower < Account
  has_many :follower_leader_relationships, class_name: "LeaderfollwerRelationship",
      dependent: :destroy
  has_many :leaders, through: :follower_leader_relationships
end

これらのコマンドは連続して機能します。

follower1.leaders = [leader1]
follower1.leaders = [leader2]
4

1 に答える 1