controller中关联关系的操作

class Reader < ActiveRecord::Base
  has_many :books
end

class Book < ActiveRecord::Base
  belongs_to :reader
end


关联这两个模型的实例有几种方法

第一种方法:
@book = Book.new(params[:book])
@book.save

新建book,直接将客户端传回的reader_id赋值给book的reader_id字段,保存book即可。
没有显式地调用关联方法,某种程度上相当于直接操作数据库,但达到了关联的效果。比较简单。
这样做有一个问题:没有对客户端传回的reader_id进行校验,可能会破坏数据库的完整性。

第二种方法
@book = Book.new(params[:book])
@book.reader = Reader.find(params[:reader_id])
@book.save

查询数据库,对客户端传回的reader_id进行了校验,显式地调用了关联方法。
这样做有两个问题(哈哈,还多了一个):1.多了一次数据库查询,性能下降;2.存在交叉存取问题,仍可能会破坏数据库的完整性。

第三种方法:
采用第一种方法处理,另外在数据库层面加上外键约束。即可避免以上问题。

你可能感兴趣的:(Ruby,ActiveRecord)