假设
一个用户有多个邮箱,一个邮箱只属于一个用户
1、分别建立用户和邮箱模型
rails g model user user_name:string user_pwd:string
rails g model mailbox address:string pwd:string
2、修改迁移文件
gedit db/migrate/20170522112232_create_mailboxes.rb
class CreateMailboxes < ActiveRecord::Migration[5.0]
def change
create_table :mailboxes do |t|
def change
create_table :mailboxes do |t|
#建立索引和外键
t.belongs_to :user, index: true,foreign_key: true
t.string :address
t.string :pwd
t.timestamps
end
end
end
t.belongs_to :user, index: true,foreign_key: true
t.string :address
t.string :pwd
t.timestamps
end
end
end
3、执行迁移
rails db:migrate
4、修改模型
gedit app/models/user.rb
class User < ApplicationRecord
has_many :mailboxes,dependent: :destroy
end
has_many :mailboxes,dependent: :destroy
end
gedit app/models/mailbox.rb
class Mailbox < ApplicationRecord
belongs_to :user
end
belongs_to :user
end
5、验证
a、创建
User.create(user_name:"aaa",user_pwd:"bbb")
User.find_by(user_name:"aaa").mailboxes.create(address:"ccc",pwd:"eee")
User.find_by(user_name:"aaa").mailboxes.all
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."user_name" = ? LIMIT ? [["user_name", "aaa"], ["LIMIT", 1]]
Mailbox Load (0.1ms) SELECT "mailboxes".* FROM "mailboxes" WHERE "mailboxes"."user_id" = ? [["user_id", 1]]
=> #<ActiveRecord::AssociationRelation [#<Mailbox id: 1, user_id: 1, address: "ccc", pwd: "eee", created_at: "2017-05-22 11:31:48", updated_at: "2017-05-22 11:31:48">]>
Mailbox.create(address:"ccc",pwd:"eee")
(0.1ms) begin transaction
(0.1ms) rollback transaction
=> #<Mailbox id: nil, user_id: nil, address: "ccc", pwd: "eee", created_at: nil, updated_at: nil>
(0.1ms) rollback transaction
=> #<Mailbox id: nil, user_id: nil, address: "ccc", pwd: "eee", created_at: nil, updated_at: nil>
b、销毁(级联)
User.find_by(user_name:"aaa").destroy
Mailbox.all
Mailbox Load (0.2ms) SELECT "mailboxes".* FROM "mailboxes"
=> #<ActiveRecord::Relation []>
=> #<ActiveRecord::Relation []>