Ruby on rails 什么';在RubyonRails中定义has_许多并且属于关系的目的是什么

Ruby on rails 什么';在RubyonRails中定义has_许多并且属于关系的目的是什么,ruby-on-rails,mongoid,Ruby On Rails,Mongoid,我不确定我是否理解使用has\u many并属于\u显式定义关系的意义。我用的是Mongoid class Band include Mongoid::Document field: name, type: String has_many :members end class Member include Mongoid::Document field :name, type: String belongs_to :band end 我知道一个成员是乐队的一部分,乐队

我不确定我是否理解使用has\u many并属于\u显式定义关系的意义。我用的是Mongoid

class Band
  include Mongoid::Document
  field: name, type: String
  has_many :members
end

class Member
  include Mongoid::Document
  field :name, type: String
  belongs_to :band
end
我知道一个成员是乐队的一部分,乐队中有很多成员。但为什么我不能在名为“band_name”的成员中定义一个字符串字段,该字段存储了乐队的名称,我可以使用该字段稍后从数据库中检索成员对应的乐队

或者,如果我想获得乐队成员,我就不能:

 Member.where(band_name => "Coldplay");

有许多
属于
是Rails提供的两种类型的关联,用于定义模型之间的关联

要查看所有类型的Rails关联,我建议您查看

当您这样定义关联时,Rails会自动将外键添加到数据库中的正确表中,这是Rails在遵循正确约定时的优势之一

简而言之,活动记录关联创建了大量方便的方法。但是,您始终可以编写自己的方法来获取所有内容。但这不是Rails的方式

例子:
Band1
是id为1的频带
Band2
是id为2的频带


如果
A
B
成员属于
Band1
,那么在数据库中,
members
表将
band\u id
值设置为1。

有许多
属于
是Rails提供的两种类型的关联,用于定义模型之间的关联

要查看所有类型的Rails关联,我建议您查看

当您这样定义关联时,Rails会自动将外键添加到数据库中的正确表中,这是Rails在遵循正确约定时的优势之一

简而言之,活动记录关联创建了大量方便的方法。但是,您始终可以编写自己的方法来获取所有内容。但这不是Rails的方式

例子:
Band1
是id为1的频带
Band2
是id为2的频带


如果
A
B
成员属于
Band1
,则在数据库中,
members
表将
band\u id
值设置为1。

我如何明确指定哪些成员是每个band的一部分。如果我使用has_many and besive_to关系,我有两个波段,波段1和波段2,以及四个成员,A、B、C、D,我如何指定A和B属于波段1,C和D属于波段2。我找不到任何关于初始化对象的内容。如果您以这种方式定义关联,那么当您创建带和成员时,
成员将在其中包含一个
带id
,使用该id您将知道它属于哪个
带。为了解释您的示例,A和B成员将在数据库中拥有B
band
s id的
band\u id
。您不必初始化这些。当您创建
成员
波段
记录时,ID将自动生成。但是如果我们希望成员A和B成为波段2的一部分,该怎么办。我们如何明确定义它呢?只需更新数据库中成员A和B的id即可。设置
band\u id
=2并保存记录,它现在将属于
Band2
,其中
Band2
s id=2位于
bands
表中。我如何明确指定哪些成员是每个频带的一部分。如果我使用has_many and besive_to关系,我有两个波段,波段1和波段2,以及四个成员,A、B、C、D,我如何指定A和B属于波段1,C和D属于波段2。我找不到任何关于初始化对象的内容。如果您以这种方式定义关联,那么当您创建带和成员时,
成员将在其中包含一个
带id
,使用该id您将知道它属于哪个
带。为了解释您的示例,A和B成员将在数据库中拥有B
band
s id的
band\u id
。您不必初始化这些。当您创建
成员
波段
记录时,ID将自动生成。但是如果我们希望成员A和B成为波段2的一部分,该怎么办。我们如何明确定义它呢?只需更新数据库中成员A和B的id即可。设置
band\u id
=2并保存记录,此时它将属于
Band2
,其中
Band2
s id=2位于
bands
表中。