您好我有一个用户注册并提供公司名称的应用程序,我将使用该名称并创建一个将保存在公司表中的子域。现在我想让它变得与众不同,因为我不想限制用户输入已存在于数据库中的同一公司名称。我希望如果公司名称已经存在,例如:输入的名称是 XYZ ,因此子域名将是 xyz.myapp.com ,并且当任何其他用户输入相同名称时子域名应该 xyz1.myapp.com ,对于其他相同的名称也应该相同。
我在这里尝试了一些,但在第二回合失败了:
def get_available_subdomain
generated_subdomain = name.downcase.gsub(/\s+|\&|\@|\#|\(|\)|\/|\.|\/|\?|\!|\"|\$|\%|\'|\*|\+|\,|\:|\;|\<|\>|\[|\]|\^|\`|\{|\}|\||\-|\~/, "") unless name.blank?
companies = Company.where(:subdomain=> generated_subdomain)
if companies.count == 0
new_subdomain = generated_subdomain
else
new_subdomain = generated_subdomain + (companies.count).to_s
end
new_subdomain
end
如何制作一种独特的方法来获得预期的结果。任何帮助将不胜感激。
答案 0 :(得分:3)
如果您使用mysql作为后端,那么您可以尝试使用mysql来生成Sud-domain,例如'xyz','xyz1','xyz2'等。
def get_available_subdomain
generated_subdomain = name.downcase.gsub(/\s+|\&|\@|\#|\(|\)|\/|\.|\/|\?|\!|\"|\$|\%|\'|\*|\+|\,|\:|\;|\<|\>|\[|\]|\^|\`|\{|\}|\||\-|\~/, "") unless name.blank?
companies = Company.where('subdomain REGEXP ?', "#{generated_subdomain}[/d]*")
if companies.count == 0
new_subdomain = generated_subdomain
else
new_subdomain = generated_subdomain + (companies.count).to_s
end
new_subdomain
end
如果数据库正在进行,那么搜索像这样的公司
companies = Company.where('subdomain ~* ?', "#{generated_subdomain}[/d]*")
如果数据库不是mysql那么我会建议搜索公司名称而不是子域名。因为您正在根据公司名称创建子域。
companies = Company.where(:name => generated_subdomain)