根据给定的名称和+1计数器构建用户名(如果用户名已存在)
我尝试根据给定的名称构建用户名。 由于许多人被命名为“John”,我需要以某种方式检查这一点并通过+1计数来创建它。
我有点迷失在如何迭代ActiveRecord以找到一个名为john
的用户名,然后如果已经存在,请尝试john1
,如果不可用,请尝试john2
,依此类推。 我可以假设它会使用while
但我不知道如何迭代它的情况。
知道怎么做吗?
为了不多次访问数据库,获取与名称匹配的用户列表,检查用户数,将计数附加到名称,然后检查已加载的集合以获取新名称。
它看起来像这样:
name = params[:name] users = User.where(User.arel_table[:name].matches("#{params[:name]}%")).to_a count = users.length name_without_collision = if count > 0 loop do break "#{name}#{count}" unless users.any? { |u| u.name == "#{name}#{count}" } count += 1 end else name end
由于您在ActiveRecord::Relation
上调用to_a
,因此您不必担心会to_a
地向数据库发送多个查询,因为它正在转换为标准的Ruby数组。