这个问题与 ruby on rails ActiveRecord 关联以及如何生成这些迁移有关。
我正在尝试为文档/数据管理系统构建一个 Web 应用程序,我有两个模型 - Arg 和 Descriptor。(使描述符成为对象而不是属性的原因是多个 Arg 共享相同的描述)。Args 和 Descriptors 的关系如下:一个 Arg 只有一个描述符。一个描述符有很多参数。
基本上,在代码中,我希望能够执行以下操作:
a1 = Arg.first
a1.descriptor = Descriptor.first
d1 = Descriptor.last
d1.args << Arg.last
d1.args << Arg.first
目前我有这个设置:
class Descriptor < ActiveRecord::Base
has_and_belongs_to_many :args
end
class Arg < ActiveRecord::Base
has_one :descriptor
end
我还运行了这些迁移:
create_table :args do |t|
t.string :name
t.timestamps
end
create_table :descriptors do |t|
t.string :name
...
t.timestamps
end
add_column :descriptors, :switch_id, :integer
create_table :args_descriptors, :id => false do |t|
t.column :arg_id, :integer, :null => false
t.column :descriptor_id, :integer, :null => false
end
当我尝试以上所有方法时,由于某种原因,我无法让两个 Args 共享一个 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
为什么第一个 Arg 的描述符现在为零?我在我的数据库中缺少一列吗?我没有正确指定关系吗?
我对 Rails 和迁移/数据库都不是很精通。如果您正在解释一个概念,请尝试提供 ActiveRecord 代码示例以及 Migrations 代码示例。谢谢。