Как настроить отношения "один ко многим"?

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

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

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

@user.network.title
@network.users

Спасибо

Ответы

Ответ 1

поэтому сеть has_may пользователей и пользовательская сеть belongs_to.

Просто добавьте таблицу network_id в users, если у вас все еще нет, а также, так как она 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

Ответ 2

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

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, вы должны пойти с ответами даниэлей.

Ответ 3

Это мой путь: run:

$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