Pessoal, Estou seguindo o curso junto com a apostila da Caelum e li toda documentação do rails relacionada às associações, mas estou com dúvida na melhor forma de modelar uma aplicação.
Minha aplicação tem um modelo de usuários e um modelo de restaurantes. Tanto os usuários quanto os restaurantes possuem apenas um endereço.
Tabela de restaurantes
create_table "restaurants", force: :cascade do |t|
t.string "nome"
t.text "descricao"
t.string "email"
t.string "telefone"
t.integer "categoria_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
Tabela de usuários
create_table "users", force: :cascade do |t|
t.string "primeiro_nome"
t.string "sobrenome"
t.string "email"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
Minha dúvida é a seguinte, pesando que os endereços dos restaurantes teriam que ter duas colunas a mais (latitude e longitude). Qual a melhor abordagem para modelar? Estou em dúvida se é o caso de criar duas tabelas separadas de endereços, uma com endereços para restaurantes e outra com endereços para usuários (ABORDAGEM 1) ou de criar uma associação polimórfica com uma tabela de endereços tanto para os usuários quanto para os restaurantes e criar uma tabela só com as coordenadas e vincular apenas aos restaurantes (ABORDAGEM 2).
ABORDAGEM 1
Tabela de endereço para usuários
create_table "user_addresses", force: :cascade do |t|
t.string "logradouro"
t.string "bairro"
t.string "cidade"
t.string "uf"
t.string "complemento"
t.string "cep"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "numero"
t.index ["user_id"], name: "index_addresses_on_user_id"
end
tabela de endereços para restaurantes
```
create_table "restaurant_addresses", force: :cascade do |t|
t.string "logradouro"
t.string "bairro"
t.string "cidade"
t.string "uf"
t.string "complemento"
t.string "cep"
t.decimal "longitude"
t.decimal "latitude"
t.integer "restaurant_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "numero"
t.index ["restaurant_id"], name: "index_addresses_on_user_id"
end
ABORDAGEM 2 -> Neste caso a tabela de endereços não teria as colunas de coordenadas e eu separaria elas em outra tabela.
Associação polimórfica
class User
has_one :address, as: :addressable
end
class Restaurant
has_one :address, as: :addressable
has_one:coordinate
end
class Address
belongs_to :addressable, polymorphic: true
end
Para finalizar, caso nenhuma dessas abordagens seja a melhor, o que vocês recomendariam? (considerando que sou bem novato nesse universo de desenvolvimento).