2

我之前问过一个问题,关于如何在我正在构建的用于管理内容的简单应用程序中构造数据。答案是查看单表继承,我认为这将成为门票。

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

我相信我现在完全理解 STI 的工作原理(类型字段采用类名),但仍然缺少一些非常基本的东西(可能非常明显,但我错过了)。有人可以填我吗?

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

id
type
name
desc

不同的类型是“站点”、“博客”、“照片”。

4

2 回答 2

6

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

但是,如果您从“站点”、“博客”或“照片”中启动任何实际上已经从“内容”模型继承的类, Site.new或者它会自动在类型字段中Site.create分配模型名称(在这种情况下)Site

同样,如果您这样做Blog.new,它将在类型列中分配博客,依此类推。

于 2010-11-30T07:25:00.323 回答
1

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

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

然后在你的 contents/new.html.erb 你可以做

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

试试看,这可能有效。

以防万一有人想了解更多关于 STI 的信息,请访问我的博客

于 2010-11-30T09:28:07.003 回答