两种模式组织和用户有一个1:一对多的关系,其中一个组织有多个用户(会员;用户也不能与任何组织):
class Organization < ActiveRecord::Base
has_many :users, dependent: :destroy
accepts_nested_attributes_for :users, :reject_if => :all_blank, :allow_destroy => true
validates_associated :users
end
class User < ActiveRecord::Base
belongs_to :organization, inverse_of: :users
end
一切工作,测试各种通过。
现在我加入了主持人功能,用户可以有(多)组织版主权限的附加关系。 因此,许多:通过第三模型,我命名为主持人一对多的关系:
class Organization < ActiveRecord::Base
has_many :users, dependent: :destroy
accepts_nested_attributes_for :users, :reject_if => :all_blank, :allow_destroy => true
has_many :moderators, class_name: "Moderator", foreign_key: "reviewee_id", dependent: :destroy
has_many :users, through: :moderators, source: :reviewer
validates_associated :users
end
class User < ActiveRecord::Base
belongs_to :organization, inverse_of: :users
has_many :moderators, class_name: "Moderator", foreign_key: "reviewer_id", dependent: :destroy
has_many :organizations, through: :moderators, source: :reviewee
end
class Moderator < ActiveRecord::Base
belongs_to :reviewee, class_name: "Organization"
belongs_to :reviewer, class_name: "User"
end
我故意用reviewer
和reviewee
名。 如果我只想用user_id
和organization_id
,虽然这可能会搞乱了在主持人的模式,我。 因为如果你再参考@user.organization
那就不是被定义为使用的关系。 难道使用1:用户和组织,或许多之间有很多关系:通过很多关系......? 通过使用许多不同的名称:通过很多关系, @user.organization
应该指的是1:许多关系,同时@user.reviewee
例如应该指的是多方面的:通过很多关系。
然而,这个实施后,顿时测试各种失败。 例如:我有签约额外的用户为组织形式。 Clicing按钮传递的organization_ID针对其附加的用户是要创建的形式。 现在突然这个id没有传递的形式和我得到的所有nil
错误,因为该组织没有定义(即使该链接依然是如url/member?organization_id=43
)。 而我可以为更多的例子。
因此,似乎有某种冲突,因为新的关系。 也许它无法理解时要使用的多方面的:通过关系多而当1:一对多的关系,即使我用differend评审和reviewee名字...... 有我模仿它不正确或者是不可能有间两种不同的关系同一型号的2?
如果删除了第二has_many :users
从组织示范线所有的测试再次通过。 所以,问题似乎是,我有这个关系两次。