【发布时间】:2010-12-07 16:47:42
【问题描述】:
我有一个Factsheet 模型,其中包含各种出版物,包括替代语言版本。不同的语言版本应作为单独的记录分开保存(因为它们可以单独订购/更新/等),但我试图将它们相互关联,以便您可以轻松判断一个出版物何时是西班牙语(或中文等)版本的其他。
我想使用:through 关联,以便关系是对称的,例如如果英文 Factsheet A 有一个西班牙语版本的 Factsheet B,那么同样 Factsheet B 有一个英文版本的 Factsheet A。
这是我的模型:
class Factsheet < ActiveRecord::Base
has_many :publications_language_relationships
has_one :en, :through => :publications_language_relationships
has_one :es, :through => :publications_language_relationships
has_one :zh, :through => :publications_language_relationships #zh = Chinese
# other stuff
end
还有……
# Table name: publications_language_relationships
#
# en_id :integer
# es_id :integer
# zh_id :integer
#
class PublicationsLanguageRelationship < ActiveRecord::Base
belongs_to :en, :class_name => 'Factsheet'
belongs_to :es, :class_name => 'Factsheet'
belongs_to :zh, :class_name => 'Factsheet'
end
但是当我启动一个 Rails 控制台来检查它是否有效时......
$ fs = Factsheet.last
=> #<Factsheet id: 5, title: "Despu\xC3\xA9s de un diagn\xC3\xB3stico de c\xC3\
xA1ncer de seno: Con...", backend_code: "fs_after_bc_diagnosis_es", language:
"es", created_at: "2010-11-30 21:23:01", updated_at: "2010-12-06 16:13:23">
$ fs.en
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: publicati
ons_language_relationships.factsheet_id: SELECT "factsheets".* FROM "factsheets"
INNER JOIN "publications_language_relationships" ON "factsheets".id = "publicat
ions_language_relationships".en_id WHERE (("publications_language_relationships"
.factsheet_id = 5)) LIMIT 1
所以我的联想有些不对劲,但我不太确定是什么。想法?
此外,这甚至是数据的合理设计,还是我应该在这里做一些不同的事情?
【问题讨论】:
标签: ruby-on-rails database database-design associations