如何建立一对多的关系?

时间:2011-12-18 21:49:15

标签: ruby-on-rails ruby-on-rails-3 activerecord activemodel

我有以下型号:

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

我需要添加哪种Rails模型关联才能执行以下操作:

@user.network.title
@network.users

由于

3 个答案:

答案 0 :(得分:48)

所以网络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

答案 1 :(得分:7)

根据您的数据库设置,您只需将以下几行添加到模型中:

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 answer。

答案 2 :(得分:1)

这是我的方式: 跑:

$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