0

好吧,看看这个奇怪的东西。我有两种类型的用户,领导者和追随者(他们每个人都有自己的子类,出于上帝的爱我不想进入的原因,而且与本次讨论无关)。

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

0

ActiveRecord错误使我认为您的LeaderFollowerRelationship模型的表没有id列。如果不是这样,您可以发布相关的内容schema.rb吗?

于 2013-10-10T04:47:19.473 回答