it-swarm-pt.tech

Como configurar um relacionamento um para muitos?

Eu tenho os seguintes modelos:

User (id, name, network_id)
Network(id, title)

Que tipo de Rails model assoc eu preciso adicionar para que eu possa fazer:

@user.network.title
@network.users

Obrigado

23
AnApprentice

então rede has_many usuários e um usuário belongs_to rede.

Basta adicionar um network_id para a tabela de usuários, se você ainda não o fez e também porque é um foreign_key vale a pena indexá-lo.

Rails generate migration AddNetworkIdToUsers

class AddNetworkIdToUsers < ActiveRecord::Migration
  def change
    add_column :users, :network_id, :integer
    add_index  :users, :network_id
  end
end

No modelo de rede, faça:

class Network < ActiveRecord::Base
  has_many :users
end

No modelo do usuário, faça:

class User < ActiveRecord::Base
  belongs_to :network
end
52
daniel

De acordo com a configuração do banco de dados, basta adicionar as seguintes linhas aos seus modelos:

class User < ActiveRecord::Base
  belongs_to :network
  # Rest of your code here
end

class Network < ActiveRecord::Base
  has_many :users
  # Rest of your code here
end

Caso você tenha uma configuração sem network_id, você deve usar a resposta daniels.

7
klaffenboeck

Esta é a minha maneira: execute:

$Rails generate migration AddNetworkIdToUsers

arquivo de migração de configuração:

class AddNetworkIdToUsers < ActiveRecord::Migration[5.1]

  def up

    add_column :users, :network_id, :integer
    add_index  :users, :network_id
  end

  def down

    remove_index :users, :network_id
    remove_column :users, :network_id
  end

end
3
Lanh