我使用的是旧数据库,因此我无法控制数据模型。他们使用很多多态链接/连接表,像这样
create table person(per_ident, name, ...)
create table person_links(per_ident, obj_name, obj_r_ident)
create table report(rep_ident, name, ...)
其中obj_name
是表名,obj_r_ident
是标识符。因此,链接报告将按如下方式插入:
insert into person(1, ...)
insert into report(1, ...)
insert into report(2, ...)
insert into person_links(1, 'REPORT', 1)
insert into person_links(1, 'REPORT', 2)
然后人 1 将有 2 个链接的报告,1 和 2。
我可以理解拥有这样的数据模型可能带来的好处,但我主要看到一个很大的缺点:使用约束不可能确保数据完整性。但是,唉,我不能再改变了。
但是要在 Rails 中使用它,我正在研究多态关联,但没有找到解决这个问题的好方法(因为我无法更改列名,也没有轻易找到解决方法)。
不过,我确实想出了一个解决方案。请提供建议。
class Person < ActiveRecord::Base
set_primary_key "per_ident"
set_table_name "person"
has_and_belongs_to_many :reports,
:join_table => "person_links",
:foreign_key => "per_ident",
:association_foreign_key => "obj_r_ident",
:conditions => "OBJ_NAME='REPORT'"
end
class Report < ActiveRecord::Base
set_primary_key "rep_ident"
set_table_name "report"
has_and_belongs_to_many :persons,
:join_table => "person_links",
:foreign_key => "obj_r_ident",
:association_foreign_key => "per_ident",
:conditions => "OBJ_NAME='REPORT'"
end
这可行,但我想知道是否会有更好的解决方案,使用多态关联。