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

私は次のモデルを持っています:

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

私ができるように、どのような種類のRailsモデルassocを追加する必要がありますか:

@user.network.title
@network.users

ありがとう

18

3 答え

has_may ネットワークと belongs_to ネットワークをネットワークに結びつけます。

まだ foreign_key にインデックスを付ける価値があるので、 network_id をusersテーブルに追加してください。

railsは移行を生成しますAddNetworkIdToUsers

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

ネットワークモデルでは、do

class Network < ActiveRecord::Base
  has_many :users
end

ユーザモデルでは:

class User < ActiveRecord::Base
  belongs_to :network
end
44
追加された
参考のために、元のUsers create_tableの移行では、 "t.references:network、foreign_key:true"という1行になります
追加された 著者 rmcsharry,
これは今日では add_reference ではありませんか?
追加された 著者 Tyler Petrochko,
良い完全なawnser :)マイグレーションのためのtx
追加された 著者 Francois,
本当のこと:)将来の読者のために、IDを追加する方法を知っています。
追加された 著者 daniel,
移行の必要はありません。network_idはすでに質問に記載されています。
追加された 著者 klaffenboeck,
有効なポイントは、合意した。あなたにもう一度アップして、それについて残念:-)
追加された 著者 klaffenboeck,

あなたのデータベースセットアップによれば、あなたのモデルに次の行を追加するだけです:

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
追加された

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

$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
1
追加された