Ruby on rails RubyonRails——只有一个,属于多个关系
这个问题与RubyonRailsActiveRecord关联以及如何生成这些迁移有关 我正在尝试为文档/数据管理系统构建一个web应用程序,我有两个模型-Arg和Descriptor。(使描述符成为对象而不是属性的原因是多个参数共享相同的描述)。Arg和描述符之间的关系如下:Arg只有一个描述符。描述符有许多参数 基本上,在代码中,我希望能够执行以下操作:Ruby on rails RubyonRails——只有一个,属于多个关系,ruby-on-rails,activerecord,migration,has-many,belongs-to,Ruby On Rails,Activerecord,Migration,Has Many,Belongs To,这个问题与RubyonRailsActiveRecord关联以及如何生成这些迁移有关 我正在尝试为文档/数据管理系统构建一个web应用程序,我有两个模型-Arg和Descriptor。(使描述符成为对象而不是属性的原因是多个参数共享相同的描述)。Arg和描述符之间的关系如下:Arg只有一个描述符。描述符有许多参数 基本上,在代码中,我希望能够执行以下操作: a1 = Arg.first a1.descriptor = Descriptor.first d1 = Descriptor.last d
a1 = Arg.first
a1.descriptor = Descriptor.first
d1 = Descriptor.last
d1.args << Arg.last
d1.args << Arg.first
当我尝试以上所有方法时,由于某种原因,我无法让两个参数共享一个描述符对象。例如:
>> Arg.first.descriptor
=> nil
>> Arg.first.descriptor = Descriptor.last
=> #<Descriptor id: 9, name: "....
>> Arg.last.descriptor
=> nil
>> Arg.last.descriptor = Descriptor.last
=> #<Descriptor id: 9, name: "....
>> Arg.first.descriptor
=> nil
>Arg.first.descriptor
=>零
>>Arg.first.descriptor=descriptor.last
=>#>Arg.first.descriptor
=>零
为什么第一个参数的描述符现在为零??我的数据库中是否缺少一列?我是否没有正确指定关系
我对rails和迁移/数据库都不是很精通。如果您正在解释一个概念,请尝试提供ActiveRecord代码示例以及迁移代码示例。谢谢。实际上,您需要在这两个对象之间建立一个中间表。在数据库世界中,这称为“映射”表。在Ruby中,您希望通过关联使用has\u many
更新了更好的文章来解释概念。我相信这些是您需要的关联和迁移:
class Descriptor < ActiveRecord::Base
has_many :args
end
class Arg < ActiveRecord::Base
belongs_to :descriptor
end
create_table :args do |t|
t.string :name
t.integer :descriptor_id
t.timestamps
end
create_table :descriptors do |t|
t.string :name
...
t.timestamps
end
类描述符Arg
和Descriptor
之间的关联存储额外信息,则需要使用
>> Arg.first.descriptor
=> nil
>> Arg.first.descriptor = Descriptor.last
=> #<Descriptor id: 9, name: "....
>> Arg.last.descriptor
=> nil
>> Arg.last.descriptor = Descriptor.last
=> #<Descriptor id: 9, name: "....
>> Arg.first.descriptor
=> nil
class Descriptor < ActiveRecord::Base
has_many :args
end
class Arg < ActiveRecord::Base
belongs_to :descriptor
end
create_table :args do |t|
t.string :name
t.integer :descriptor_id
t.timestamps
end
create_table :descriptors do |t|
t.string :name
...
t.timestamps
end