Quando participei do desenvolvimento do projeto clubedomenu.com, um sistema voltado para delivery de comida, foi feito pensando exclusivamente para a cidade de Londrina. Recentemente surgiu a necessidade de expandir o sistema para outras localidades. Feito um estudo das funcionalidades existentes.
Foi visto que as urls do sistema foram contruídas dessa forma:
1 clubedomenu.com/nome_do_restaurante
Agora é preciso que a url seja montada dessa forma, para distinguir os restaurantes por cidade:
1 clubedomenu.com.br/nome_da_cidade/nome_do_restaurante
Além disso pode acontecer casos onde 2 restaurantes em diferentes cidades com o mesmo slug nome_do_restaurante. Como isso pode acontecer? Muito simples, basta a mesma empresa ter uma matriz e uma filial com o mesmo nome em cidades diferentes.
Desde o começo do projeto foi adotado a gem friendly_id que transforma as urls em uma forma mais amigável.
Para resolver o problema de franquia de restaurantes em cidades diferentes com o mesmo slug a gem oferece essa solução:
1 friendly_id :nome_do_campo_restaurante, :use => :scoped, :scope => :nome_do_campo_cidade.
2 validates_uniqueness_of :nome_do_campo_restaurante, :scope => :city
Dessa forma é possível obter urls assim.
1 clubedomenu.com.br/nome_da_cidade_1/nome_do_restaurante
2 clubedomenu.com.br/nome_da_cidade_2/nome_do_restaurante
Aqui está um teste que prova que é possível ter subdomínios iguais em cidades diferentes.
1 describe "scoped city" do
2 let!(:restaurant_1) { FactoryGirl.create(:restaurant, name: "Pizzaria Boa", city: "Maringa", subdomain: "veneza") }
3 let!(:restaurant_2) { FactoryGirl.create(:restaurant, name: "Pizzaria Boa", city: "Londrina", subdomain: "veneza") }
4 it "should repeat slug scoped by city", :vcr do
5 restaurant_1.to_param.should eq("veneza")
6 restaurant_2.to_param.should eq("veneza")
7 end
8 end
Twitter @reginato
Comentários
Included file post/disqus_thread.html not found in _includes directory