您好,我有一个应用程序,用户在其中注册并提供公司名称,我将使用该名称并创建一个子域,该子域将保存在公司表中。现在我想让它独一无二,因为我不想限制用户输入数据库中已有的相同公司名称。我希望如果公司名称已经存在,例如:输入的名称是 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
如何制定独特的方法来获得预期的结果。任何帮助将不胜感激。
最佳答案
如果您使用 mysql 作为后端,那么您可以尝试使用此方法来搜索具有生成的 sud 域(例如“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)
关于ruby-on-rails-3 - 从后端验证和创建子域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24299855/