如何在单表继承中填充:type字段?

时间:2010-11-30 04:46:52

标签: ruby-on-rails ruby single-table-inheritance

我之前问了一个关于如何在我正在构建的简单应用程序中构建数据以管理内容的问题。答案是看Single Table Inheritance,我认为这将是票。

我已经阅读了很多例子,但似乎总是遗漏的一件事是:type列实际上是如何填充的?我是否包含一个带下拉列表的表单字段,以便用户可以选择类型?

我相信我完全理解STI现在是如何工作的(类型字段具有类名),但我仍然缺少一些非常基本的东西(可能非常明显,但我很想念它)。有人能填补我吗?

我有一个像这样的内容表:

id
type
name
desc

不同的类型是“网站”,“博客”,“照片”。

2 个答案:

答案 0 :(得分:6)

猜测您将所有“网站”,“博客”,“照片”信息存储在内容表中。当您通过Content.new启动任何对象时,它没有为类型字段分配任何值。

但如果你从“网站”,“博客”或“照片”发起任何课程,而这些课程实际上是从“内容”模式继承而来的 - Site.newSite.create然后它会在类型字段中自动分配model_name(在本例中为Site

同样,如果您执行Blog.new,它会在类型列中指定博客,依此类推。

答案 1 :(得分:1)

@jyoseph,是的,你是绝对正确的。您可以在新的和编辑视图中添加一个下拉列表,其中包含类型,在您的案例中为“站点”,“博客”,“照片”。您还可以在Application Helper文件中创建一个帮助程序,如下所示

def content_type
   return ["Site", "Blog", "Photo"]
end

然后在你的内容/ new.html.erb中你可以做到

<p>
    <%= f.label :type %><br />
    <%= f.select :type, content_type %>
</p>

尝试一下,这可能有用。

如果有人想了解更多关于STI的信息,请访问my Blog