我正在建立一个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)。
答案 0 :(得分: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
&amp; 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_groups
模型中的 Contract
。
Q2:我真的不明白你想做什么。请解释Coas和Custgroups之间的关系,我会尽力帮助您