0

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

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

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

在索引上:
/photos - 显示所有页面的布局缩略图,带有“照片”类型
/blog - 布局显示所有页面,带有“博客”类型

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

每种类型都需要单独的控制器吗?如果我不需要对页面的创建/更新方式进行任何更改,我是否需要单独的模型?我是否只是创建指向呈现我需要的布局的动作的路线?我想我看到了“STI”这个词,让它变得比它必须的更难。我只是很谨慎,因为我想学习“rails way”。我什至需要性病吗?

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

4

1 回答 1

3

在这里,我写了一篇博文,将指导您逐步完成 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

如果您使用此代码,您的 Page 模型中必须有一个名称为 photo 的列,该列将存储上传文件的 file_name。

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

更新

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

于 2010-12-10T06:33:18.507 回答