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 上的关联?在这里,我们有一条记录,其中我有 3 个或更多字段链接到同一个表 (COA)。

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关联

如果 acontract需要访问所有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 回答