当我创建的User方法被调用时,Rails服务器挂起。没有错误,我不知道如何测试它

时间:2011-09-27 02:03:20

标签: ruby-on-rails oop model-view-controller

我在User.rb模型

中定义了这个方法(也有下面详细介绍的辅助方法)
def get_random_items
return nil unless groups_as_member
if groups_as_member == 1
  assignments = groups_as_member.assignments.limit(5)
  random_items = Post.rand_by_post(assignments)
end
random_groups = groups_as_member.sort_by{rand}.slice(0,5)
random_items = Array.new
i=0
return unless random_groups
until i == 10 do
  random_groups.each do |group|
    assignments = group.assignments.limit(5)
    if y = Post.rand_by_post(assignments)
      random_items << y
      i+=1
      if random_items == 5
        return random_items
      end
    else
      return random_items
    end
  end
end

return random_items
end
Post.rb中的

辅助方法rand_by_post

def self.rand_by_post(assignments)
  find_by_id(assignments.rand.post_id)
end

在用户控制器show操作中:

def show
@public_groups = Group.public
@groups_member = @user.groups_as_member
@groups_as_owner = @user.groups_as_owner

@random_items = @user.get_random_items
end

当我在用户show action中注释掉调用时,用户show在我的开发和生产服务器上运行正常。但是当我尝试使用该方法时,服务器将挂在那里,而不是做任何事情。我在服务器日志或heroku日志中找不到任何错误。我的考试写作技巧非常有限,而且我在编写整个方法时遇到了麻烦。 有人能发现问题吗?

1 个答案:

答案 0 :(得分:2)

如果您的random_groups为空,则您的辅助方法get_random_items将进入无限循环until i == 10 do ... end。这可能是原因。

您可能希望将return unless random_groups更改为return if random_groups.empty?