この質問は、Ruby on Rails ActiveRecord の関連付けと、それらの移行を生成する方法に関連しています。
ドキュメント/データ管理システム用の Web アプリを構築しようとしていますが、Arg と Descriptor の 2 つのモデルがあります。(記述子を属性ではなくオブジェクトにする理由は、複数の Arg が同じ記述を共有するためです)。Arg と Descriptors の関係は次のとおりです。Arg には 1 つの記述子しかありません。ディスクリプタには多数の引数があります。
基本的に、コードでは、次のことができるようにしたいと考えています。
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
上記のすべてを試してみると、何らかの理由で 2 つの 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 の記述子が nil になったのはなぜですか?? データベースに列がありませんか? 関係を正しく指定していませんか?
私はレールや移行/データベースにあまり精通していません。概念を説明している場合は、ActiveRecord のコード例と Migrations のコード例の両方を提供してください。ありがとう。