我在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日志中找不到任何错误。我的考试写作技巧非常有限,而且我在编写整个方法时遇到了麻烦。 有人能发现问题吗?
答案 0 :(得分:2)
如果您的random_groups
为空,则您的辅助方法get_random_items
将进入无限循环until i == 10 do ... end
。这可能是原因。
您可能希望将return unless random_groups
更改为return if random_groups.empty?