一页模型,不同的布局/视图。我如何利用STI?

时间:2010-12-10 06:25:13

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

我有一个应用程序,我正在构建学习rails。它是一个简单的页面管理器,它使用awesome_nested_set来创建嵌套页面。我想使用STI,但我不确定如何做到这一点。我看到的STI的大多数例子涉及一个主要的“宠物”模型和“狗”和“猫”的子模型;我很难把它变成现实世界的例子。这就是我使用这些页面的方式。

3个不同的页面“类型”:博客,照片,移动照片。真正描述这一点的唯一方法是向您展示我在Coldfusion中构建的当前网站BlogPhotoMobile Photos

所有使用相同的表和几乎相同的属性。照片部分使用照片属性并进行一些细微的更改,例如上传,调整大小等 - 但除此之外,不同“类型”之间的所有内容都相同。页面类型之间的主要区别在于页面的布局方式以及页面的访问方式。例如:

关于指数:
/ photos - 布局缩略图显示所有具有“照片”类型的页面 / blog - layout以显示所有具有“Blog”类型的页面

在节目中:
/ photos / 1 - 显示大照片/上一张/下一张照片
/ blog / 2 - 显示博客条目w /上一个/下一个条目

每种类型都需要一个单独的控制器吗?如果我不需要对页面的创建/更新方式进行任何更改,是否需要单独的模型?我是否只创建指向呈现我需要的布局的动作的路线?我认为我看到的是“STI”一词,并且使它变得比以往更难。我只是小心翼翼,因为我想学习“轨道方式”。我甚至需要STI吗?

任何帮助将不胜感激,我只需要克服这个驼峰,有人帮助它“点击”! :)

1 个答案:

答案 0 :(得分:3)

Here I have written a blog post将指导您逐步完成STI。

就Photo类而言,您必须上传图像的地方

class Photo < Page

attr_accessor :photo_file_name, :photo_file_size, :photo_file_type

  has_attached_file :photo,
                  :url => "#{your_upload_url}",
                  :path => "#{your_upload_path}"
end

如果您使用此代码,则您的页面模型中必须有一个带有名称照片的列,该列将存储上载文件的file_name。

希望这对你有所帮助。如果您需要更多建议,我在这里。 :d

<强>更新

再次阅读问题后,我意识到您还需要一个单独的页面来处理所有子STI课程。因此,您将需要不同的控制器来处理它。