Article image
Guilherme Marcelino
Guilherme Marcelino09/05/2023 10:38
Compartilhe

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.

    Compartilhe
    Comentários (1)

    CS

    Cassio Santana - 09/05/2023 11:43

    Muito bom Guilherme.

    Assim ficou fácil a compreensão.

    Obrigado!