Как настроить отношения один ко многим? - PullRequest
21 голосов
/ 19 декабря 2011

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

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

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

@user.network.title
@network.users

Спасибо

Ответы [ 3 ]

49 голосов
/ 19 декабря 2011

сеть 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
7 голосов
/ 19 декабря 2011

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

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

2 голосов
/ 11 января 2018

Это мой путь: пробег:

$rails generate migration AddNetworkIdToUsers

затем файл конфигурации config:

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
...