rubyonrails:Ruby on rails开发从头来( 4十 2)- ActiveRecord基础(主键和ID)

  也许你已经注意到了,在我们前面代码中数据库定义里都使用了eger型字段id作为主键这是Active Record个约定   或许你要问为什么不用订单编号或者某个有意义列来作为主键呢?使用id作为主键有个很重要原因就是如果使用具有内在格式主键随着时间推移有可能其中规则也会变化例如使用ISBN号码来给book表做主键毕竟ISBN号码是唯但是有可能当本书写完后美国出版业已经发展了并且在所有ISBN号码后又附加了位数字

  如果我们使用了ISBN作为book表主键我们就要更新所有book表记录来反映这个变化而且还有个问题还有其他表引用了book表主键我们就要更新所有引用这还牵涉到要删除外键所有切都是非常痛苦

  如果使用有意义值作为主键那么我们将收到外界业务规则影响如果使用id我们可以自己完全控制而且如果象ISBN等些东西改变将不会影响到数据库结构

  如果你从个新数据库结构开始可能会遵循约定给所有表都使用id作为主键但是当你使用个既存数据库开始时候Active Record提供了简单思路方法来让你重新给表指定主键例如:

BadBook < ActiveRecord::Base
_primary_key "isbn"
end


  通常Active Record会注意给新创建记录生成主键值-使用自增长整数不管怎样当你override表主键名字时候你就需要自己负责给新建记录个唯主键值也许有些让人惊讶你还是设置个id属性来完成这件事Active Record所关心主键设置永远都使用名为id属性_primary_key声明只是设置了使用列名下面例子我们使用ISBN作为主键

book = BadBook.
book.id = "0-12345-6789"
book.title = "My Great American Novel"
book.save
# ...
book = BadBook.find("0-12345-6789")
puts book.title # => "My Great American Novel"
p book.attributes #=> {"isbn" =>"0-12345-6789",
"title"=>"My Great American Novel"}


  也就是说在设置主键时候使用id属性其他时候使用真实列名

Tags:  rubyonrails安装 rubyforrails rubyrails rubyonrails

延伸阅读

最新评论

发表评论