1

RORでマルチクライアントシステムを構築中です。( http://guides.rubyonrails.org/association_basics.html#polymorphic-associationsを見ています)

クライアントは契約を結んでいる構造になっているので、ユーザー名、パスワード、契約でログインすると、システムにアクセスできるようになります。

コントラクト ID は「マスター キー」としてあり、システム内のすべてのテーブルに存在する必要があります。

class CreateContracts < ActiveRecord::Migration
  def change
    create_table :contracts do |t|
      t.integer  :contract_id
    end
  end
end

(勘定科目一覧表)

class CreateCoas < ActiveRecord::Migration
  def change
    create_table :coas do |t|
      t.integer  :account_id
      t.string    :account_name
    end
  end
end


class CreateCustGroups < ActiveRecord::Migration
  def change
    create_table :custgroups do |t|
      t.integer  :account_id1
      t.integer  :account_id2
      t.integer  :account_id3
    end
  end
end

Q1: belongs_to でコントラクトを定義するにはどうすればよいですか? システム内のすべてのテーブルに契約テーブルへのリレーションが必要です。すべてのテーブルと関係を持たなければなりませんか? (そう思います)

class Contracts < ActiveRecord::Base
  has_and_belongs_to_many :Coas
  has_many:xxx
  belongs:to
end

Q2: custgroup で関連付けを定義するにはどうすればよいですか? ここに、同じテーブル (COA) にリンクする 3 つ以上のフィールドがあるレコードがあります。

4

1 に答える 1

1

Jesper が言ったように、あなたが達成しようとしていることを理解するのはかなり難しいですが、私はあなたの質問に答えようとします:

Q1 : すべてのテーブルでコントラクトを参照する場合は、すべてのテーブルにforeign_keyを追加してcontract_id 、各 create_table 呼び出しに contract_id キーが含まれるようにする必要があります

create_table :new_models do |t|
  t.belongs_to  :contract # this will create a contract_id field
end

列にインデックスを追加することもできます

add_index :new_models, :contract_id

次に、すべてのモデルでbelongs_to関連付けを追加します。

class NewModel
  ...
  belongs_to :contract
  ...
end

したがって、Coas&CustGroupsがコントラクト テーブルを参照する必要がある場合は、両方の移行を変更してキーを含め、次にモデルを変更して関連付けcontract_idを追加する必要があります。belongs_to

contractがそれを参照するすべてのものにアクセスする必要がある場合は、関連付けCoasを使用する必要がありますhas_many

class Contracts < ActiveRecord::Base
  ...
  has_many :coas
  ...
end

ここは必要ないように見えますが、has_and_belongs_to_manyそれについては間違っているかもしれません。コントラクトが CustGroups にもアクセスする必要がある場合は、次を追加します。

has_many :cust_groupsContractモデルで。

Q2 : あなたのやりたいことがよくわかりませんでした。Coas と Custgroups の関係を説明してください。お手伝いします

于 2012-10-27T14:04:34.267 に答える