我有这样的模特:
class Person
has_many :groups
has_many :group_memberships, :foreign_key => "member_id"
end
class Group_Membership
belongs_to :member, :class_name => 'Person'
belongs_to :group
end
class Group
belongs_to :person
has_many :group_memberships
has_many :members, :class_name => "Person", :through => "group_memberships", :foreign_key => "member_id"
一个人要求membership
,并使用status false
创建一个模型。 group
页面上person#show
的所有者可以查看谁曾要求membership
以及groups
参与其中。由于groups
和group_memberships
belongs_to
一个person
,但group_membership
也belongs_to
一个group
,我该如何在person#show
允许person
查看memberships
groups
person
拥有groups
的人,以及person
membership
status
1}}有一个false
?
## EDIT ##
person
此处group
为默认值,因为如果所有者edit
此状态为true
,则{{1}}将被接受,并将其设为{{1}}。
从这个问题中获取的想法:Question about Association and Models on Rails
答案 0 :(得分:1)
以下是一些伪造的代码,我认为这些代码可以帮助您实现目标:https://gist.github.com/981513
class Person
has_many :groups
has_many :group_memberships, :foreign_key => "member_id", :through => :groups
scope :owned_groups, where(:is_owner => true).joins(:group_memberships) # gets all groups where this person is owner
end
class Group_Membership
belongs_to :member, :class_name => 'Person'
belongs_to :group
# note that these attributes need to be defined
# is_owner (boolean)
# member_approved (boolean)
scope :requested, :where(:member_approved => false)
end
class Group
belongs_to :person
has_many :group_memberships
has_many :members, :class_name => "Person", :through => "group_memberships", :foreign_key => "member_id"
end
公平警告,我根本没有测试过,我还在学习新的AR模式:)
我认为你的group_memberships关系可能是最合适的:通过关系,然后围绕关系可以拥有的不同“状态”创建范围。您也可以在state machine结帐时获得一些帮助。
答案 1 :(得分:0)
我想是那样的
class Person
has_many :groups
has_many :group_memberships, :foreign_key => "member_id"
has_many :own_groups, :class_name => "Group", :through => "group_memberships", :foreign_key => "group_id"
end
class Group_Membership
belongs_to :member, :class_name => 'Person'
belongs_to :group
end
class Group
belongs_to :person
has_many :group_memberships
has_many :asked_group_memberships, :class_name => 'Group_Membership', :conditions => ['status = ?', false]
has_many :members, :class_name => "Person", :through => "group_memberships", :foreign_key => "member_id", :conditions => ['group_memberships.status = ?', true]
end