控制器不做它应该做的事情?

时间:2009-09-05 19:15:48

标签: ruby-on-rails

在我的应用程序中,我有一些组,这些组基本上只是可​​以通过多态关系分配给不同模型的标签。在模型组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.我确定我错过了一些小事......

1 个答案:

答案 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