在我的应用程序中,我有一些组,这些组基本上只是可以通过多态关系分配给不同模型的标签。在模型组I中:
def get_members_of(klass)
self.group_memberships.delete_if {|gm| gm.groupable_type != klass}.map{|g| g.groupable}
end
所以如果我这样做了:
group.group_memberships
我会得到组组中的所有对象。但是,如果我想将它限制为仅作为模型A实例的对象,我会这样做:
group.get_members_of(A)
在控制台中,这完全符合预期。但是,我在控制器中遇到了一些意外的行为:
def show
params[:studies1] = @group.get_members_of('Study').length
@studies = @group.get_members_of('Study')
params[:studies2] = @studies.length
@studies = @group.group_memberships.delete_if {|gm| gm.groupable_type != "Study"}.map{|g| g.groupable}
params[:studies3] = @studies.length
end
如预期参数[:studies1] == 1,但是研究2和3是== 0.我确定我错过了一些小事......
答案 0 :(得分:0)
get_members_of函数存在严重缺陷!当调用get_members_of时,它会从group.group_memberships中删除不属于klass的所有其他成员。如果为其他“类”调用该函数的额外时间,则没有group_members ...
这很有效,但看起来很差:
def get_members_of(klass)
x = []
self.group_memberships.each {|gm| x << gm if gm.groupable_type == klass }
x.map{|g| g.groupable}
end