关于表间关联

关于表间关联

应用php?name=rails" onclick="tagshow(event)" class="t_tag">rails进行web敏捷开发中文版,第一版
82页
class LineItem < ActiveRecord::Base
 belongs_to :product
end

但为什么product模型里不用声明
has_many 或者 has_one
的呢?

底下注释
译者注:这里的“属于“实际上是泛指“多对一”的关系,譬如说“订单条目 ’属于' 货品“,就是指”可以有多个订单条目与一个货品相关联
,但不允许一个订单条目与多个货品关联“

关于这段话,我这样想,但想不过去。
可以有多个订单条目与一个货品相关联
A订单条目
  A订单条目下有这样的数据
 rails book

B订单条目
B订单条目
  A订单条目下也可以有这样的数据
 rails book

但不允许一个订单条目与多个货品关联

C订单条目
  C订单条目不可以同时有
   rails book
   ruby book
因为rails book和ruby book是不同的货品,所以这不允许这样。
但是实际上照书本操作又是可以这样呢,为什么?我哪里假设错了?
一个订单当然可以和多个货品有关。比如,我经常在当当网站买书和DVD等,但我的订单就一个,你说我的订单是不是至少与图书和DVD同时发生关系,并有关联了,而且买主就是我一个人。

cclong,你要根据实际生活中的现象来总结这些逻辑关系,因为他们都是从实际中抽象出来的,好像很绕人,但你像我刚才说的一想就明白了。

再比如,你和我都在当当网买了Ruby For Rails这本书,你和我的订单不是同一张订单吧,但我们的订单都和货品Ruby For Rails这本书有关了,我们都买了它。

has_one是一对一的关联;has_many是一对多的关联;has_and_belong_to_many是多对多的关联。
多对一
哪里又冒个多对一关联出来了呢。。
但为什么书本又注释:“但不允许一个订单条目与多个货品关联” 呢
而且他在product表又不用has_XXX
这不是不符合语法么?
一个'订单',有多个'订单条目',每个'订单条目'和'一种货品'关联,订单条目里有该货品的数量.
-------
但为什么product模型里不用声明
has_many 或者 has_one
的呢?
-------
常常给人一个错觉,似乎belongs_to和has_xxx必须'成对出现'.----不是这样的.当你要用某个关联的时候,才去声明.如果不用的话,可以不必声明.
就像axgle所说的,不一定得成对出现。

例如:一个人可以有多个订单,而且我们需要Person.Orders这样的一个属性,所以我们申明:has_many :orders,但是我们不需要访问 order.person 所以我们不需要 belongs_to :person
就是单向关联或是双向关联

这看你的需求了,你在product里加上has_many也行啊

如果你想从product得到lineitem对象的时候,那你就得去写has_many了。。。如果没有这个需求,不写也行