【发布时间】:2012-05-27 22:15:06
【问题描述】:
我目前有两个模型作为 STI。
class Event
class BlockedTime < Event
class Appointment < Event
除了 'Appointment' has_one 'client' 和 has_one 'service' 之外,这些模型是相似的,而 'BlockedTime' 没有这些关联。
此外,我希望能够轻松地在这两种类型之间进行转换,当我搜索时,我通常会同时搜索两种类型,而不是其中一种。出于这些原因,我犹豫将它们分成单独的表格。
对于类型之间的切换,我目前以相同的形式执行此操作,使用父“事件”类型,并将“类型”存储为隐藏字段,但这绝对不是很好。我必须在控制器中进行各种转换以检查验证等。
您建议如何建模?
【问题讨论】:
-
你真的需要它们是独立的模型吗?似乎几个标志就可以了。
-
你能扩展一下吗?当某些记录没有关联时,我将如何处理 has_one 关联的情况?
-
只是大声思考。我从未使用过 STI,所以我可能错了。没关系:)
-
不确定“在两种类型之间转换”是什么意思。 看起来 STI 是合适的,这样每个模型都有自己的验证和关联,并且底层类包含共享属性,这意味着不需要“转换”。
-
这个问题,例如:如果我编辑一个“BlockedTime”,表单有一个blocked_time对象,提交到blocked_time控制器。但是,如果用户将其更改为表单中的“约会”(通过单选按钮),则 URL 仍指向不起作用的“blocked_time”控制器,因为它会运行错误的验证。
标签: ruby-on-rails ruby-on-rails-3 database-design activerecord model