子域验证和后端创建

时间:2014-06-19 06:12:12

标签: ruby-on-rails-3 subdomain

您好我有一个用户注册并提供公司名称的应用程序,我将使用该名称并创建一个将保存在公司表中的子域。现在我想让它变得与众不同,因为我不想限制用户输入已存在于数据库中的同一公司名称。我希望如果公司名称已经存在,例如:输入的名称是 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

如何制作一种独特的方法来获得预期的结果。任何帮助将不胜感激。

1 个答案:

答案 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)