数据库关联

model 名字是单数, 例如 app/models/user.rb,

class User < ActiveRecord::Base
end

 belongs_to 后面必须是单数, 都是小写
 has_many 后面必须是复数
 controller 都是复数, 例如 users_controller.

class UsersController < ...
end
belongs_to :mother

等同于下面的:

belongs_to :mother, :class => 'Mother', :foreign_key => 'mother_id'

这个就是Rails最典型的 根据 惯例来编程。 (要知道,在java hibernate中,声明这样关联关系的过程,极其类似:

    声明 哪个表 对应的是 哪个class
    再在class之间, 声明好 关联关系。
    声明关联关系的时候,写上 20行代码。 )

1.belongs_to :mother, rails就能判断出: mothers 表,是一的那一端。 而当前class 是: "class Son", 那么rails 就知道了 两个表的对应关系。

2.:class => 'Mother', 表示, 一的那一端, 对应的model class是Mother. 根据rails的惯例, Mother model对应的是 数据库中的 mothers 表。

3.:foreign_key => 'mother_id', rails就知道了, 外键是 'mother_id'. 而一对多关系中, 外键是保存在 多的那一端(也就是 sons, 所以说,在 sons表中, 必须有一个列, 叫做: mother_id )

所以, 这个复杂的SQL 条件就齐备了, 可以生成了。

上面的ruby代码,配置好之后, 就可以这样调用:

son = Son.first
son.mother  # .mother方法,  是由 class Son 中的 belongs_to 产生的。

mother = Mother.first
mother.sons   # .sons 方法,  是由 class Mother 中的 hash_many  产生的。
class Student
  has_many :lessons
  has_many :teachers, :through => :lessons
  # 上面的简写, 相当于:
  has_many :teachers, :class => 'Teacher', :foreign_key => 'teacher_id', :throught => :lessons
end

class Teachers
  has_many :lessons
  has_many :students, :through => :lessons
end

一个老婆: 有一个老公

class Wife
  belongs_to :husband
end

一个老公: 有一个老婆。

class Husband
  has_one :wife
end

你可能感兴趣的:(数据库)