Relacionamento One-to-One em Ruby
O relacionamento one-to-one ocorre quando um objeto de uma classe está associado a apenas um objeto de outra classe. Em termos simples, é uma relação de correspondência singular entre duas entidades, em ruby essa associação é mais conhecida como:
has_one/belongs_to
Vamos considerar um exemplo prático de um sistema de cadastro de usuários e perfis. Cada usuário pode ter apenas um perfil associado, e cada perfil está vinculado a apenas um usuário.
Implementação do Relacionamento One-to-One em Ruby:
1- Definir as classes:
class User < ActiveRecord::Base
has_one :profile
end
class Profile < ActiveRecord::Base
belongs_to :user
end
Nesse exemplo, temos duas classes: User e Profile. A classe User representa um usuário, enquanto a classe Profile representa o perfil associado a esse usuário.
2- Criar as migrações:
class CreateUsers < ActiveRecord::Migration[6.0]
def change
create_table :users do |t|
# Atributos do usuário
t.string :name
t.string :email
t.timestamps
end
end
end
class CreateProfiles < ActiveRecord::Migration[6.0]
def change
create_table :profiles do |t|
# Atributos do perfil
t.string :bio
t.integer :age
t.references :user, foreign_key: true
t.timestamps
end
end
end
As migrações acima criam as tabelas users e profiles, onde a tabela profiles contém uma coluna user_id para estabelecer a associação com a tabela users.
3 - Utilizar o relacionamento:
Agora, você pode usar o relacionamento one-to-one entre User
e Profile
. Aqui estão alguns exemplos de como interagir com esses objetos:
# Criar um usuário e um perfil associado
user = User.create(name: "John Doe", email: "john@example.com")
profile = Profile.create(bio: "Lorem ipsum", age: 25, user: user)
# Acessar o perfil de um usuário
user.profile # Retorna o perfil associado ao usuário
# Acessar o usuário associado a um perfil
profile.user # Retorna o usuário associado ao perfil
# Atualizar atributos do perfil
profile.update(bio: "Novo texto do perfil")
# Remover o perfil de um usuário
profile.destroy
#Resumindo
has_one
indica que a classe possui uma instância associada a ela, enquanto belongs_to
indica que a classe pertence a outra classe.
É importante lembrar que, para o funcionamento adequado do relacionamento one-to-one em Ruby com ActiveRecord, é necessário seguir as convenções de nomenclatura e definir as associações corretamente usando os métodos has_one
e belongs_to
nos modelos apropriados.