Как настроить связь один ко многим?

У меня есть следующие модели:

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

Какой тип модели Rails мне нужно добавить, чтобы я мог сделать:

@user.network.title
@network.users

Спасибо


person AnApprentice    schedule 18.12.2011    source источник


Ответы (3)


итак сеть has_many пользователей, а пользователь belongs_to сети.

Просто добавьте network_id в таблицу пользователей, если вы еще этого не сделали, а также, поскольку это foreign_key, стоит ее проиндексировать.

rails generate migration AddNetworkIdToUsers

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

В сетевой модели выполните:

class Network < ActiveRecord::Base
  has_many :users
end

В пользовательской модели выполните:

class User < ActiveRecord::Base
  belongs_to :network
end
person daniel    schedule 18.12.2011
comment
Нет необходимости в миграции, network_id (согласно вопросу) уже находится в таблице. - person klaffenboeck; 19.12.2011
comment
правда что :). просто для будущих читателей, чтобы они знали, как добавить идентификатор. - person daniel; 19.12.2011
comment
Разве это не должно быть сейчас с add_reference? - person Tyler Petrochko; 15.11.2015
comment
для справки, в исходной миграции пользователей create_table это будет одна строка t.references :network, foreign_key: true - person rmcsharry; 08.09.2016

В соответствии с вашей настройкой базы данных вам просто нужно добавить следующие строки в свои модели:

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

Если у вас есть настройка без network_id, вы должны использовать ответ Дэниэлса.

person klaffenboeck    schedule 18.12.2011

Это мой путь

$rails generate migration AddNetworkIdToUsers

затем настройте файл миграции:

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
person hula-san    schedule 11.01.2018