web-dev-qa-db-ja.com

1対多の関係を設定するには?

次のモデルがあります。

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

どんな種類のRails model assocは私ができるように追加する必要がありますか:

@user.network.title
@network.users

ありがとう

23
AnApprentice

したがって、ネットワークhas_manyユーザーとユーザー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
52
daniel

データベースの設定によると、次の行をモデルに追加するだけです。

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を使用しない設定の場合、danielsの回答を使用する必要があります。

7
klaffenboeck

これは私のやり方です:実行:

$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
3
Lanh