0

「has_many :through」を使用して次のモデルを作成することを考えています。

class Contract < AR::Base
  has_many :clientlines
  has_many :codelines
  has_many :clients, :through => :clientlines
  has_many :codes, :through => :codelines
end

class clientlines < AR::Base
  belongs_to :contract
  belongs_to :client
end

class Client < AR::Base
  has_many :clientlines
  has_many :contracts, :through => :clientlines
end

class codeline < AR::Base
  belongs_to :contract
  belongs_to :code
  units_alloc -------**I would like to add this attribute after this intermediate
 end                 has been created?

class Code < AR::Base
  has_many :codelines
  has_many :contracts, :through => :codelines
end

たとえば、最初に「rails generate model Contract authnum:string, client_id:integer, st_date:date, end_date:date」でモデルを作成しますか? 次に、移行の前にすべての関連付けを入力しますか?.

また、 has_many :through 関連付けを使用すると、すべての結合テーブルがレールによって自動的に作成されることを理解しています。それはいつ起こりますか?

最後に、** で示されているように、この属性をコードラインに含めることはできますか? また、この属性を結合テーブルに追加するために、「rails generate migration add_units_alloc_to_codelines units_alloc:number」を作成する必要がありますか? また、数値が小数点以下2桁であると宣言する方法も疑問に思っていましたか?

お時間とご都合がよろしければ、私のデータベースのデザイン案についてコメントいただけませんか?

ありがとう。

4

1 に答える 1

0
  1. を使用has_many :throughすることで、他の 2 つのモデルを接続する 3 番目のモデルを使用するため、Rails はそのモデルを自動的に構築しません。自分で構築し、他の 2 つのモデルの外部キーを参照します。

  2. モデルに複数形の名前を付けないでください。常に単数形です。単数形で名前を付けられない場合は、間違っています

  3. モデルを作成する順序はあまり重要ではありません(レールは、後で簡単に変更できるいくつかの移行を生成します)。

  4. そのunits_alloc属性は、作成時にモデルに追加するだけです。簡単です。

  5. t.decimal :amount, :precision => 6, :scale => 2小数点以下2桁の場合、移行のようなものを使用します(その例では、6桁と小数点以下2桁が得られます)

  6. Rails Guidesを読んでください。多くの問題を解決するのに役立ちます。

于 2012-02-24T19:52:51.410 に答える