关于一对多的连接表无法更新

时间:2013-10-10 01:20:00

标签: ruby-on-rails activerecord

好的,检查一下这种怪异。我有两种类型的用户,领导者和追随者(每个人都有他们自己的子类,原因是为了上帝的爱,我不想进入,而且不是与这个讨论密切相关的。)

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]

1 个答案:

答案 0 :(得分:0)

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