0

我刚开始使用rails并且遇到了一个小问题。我试图实现的是一种允许用户创建“页面”的方法,他们可以在这些页面上添加小部件。

所以我为“pages”建立了一个模型,它有名称、描述等数据库字段。它还有一个“has_many :widgets”关联。

这就是我难过的地方。我有一个用户可以使用的小部件列表。诸如“关于我”、“照片库”、“评论”、“视频”等内容。他们可以选择其中之一,自定义内容并添加到他们的页面。

我想,当用户选择并自定义一个小部件时,我将在小部件表中添加一个带有“belongs_to user_id”的条目。但是,我需要指定用户选择的小部件以及输入的自定义内容。

我如何在 Rails 中实现它?我在哪里可以定义每个小部件类型?

我可以想到几种方法,但不确定哪种方法最好。

  • 一种选择是为每个小部件使用一个模型。我会有 AboutMeWidget、VideoWidget 等。这将允许我使用小部件可能需要的任何字段自定义每个模型。但是,这似乎效率不高,并且需要太多模型。
  • 另一种选择是在某处(但在哪里?)定义小部件类型,然后简化小部件表中的“widget_type”。(因此该表将包含“belongs_to :user”和“has_one :widget_type”。)我还必须为用户输入的数据提供一个字段(可能通过 XML?)。
  • 我能想到的最后一个选项是使用 Ruby 类来定义小部件。当用户自定义小部件时,我将从小部件的类创建一个对象并存储该对象。

还有其他更好的方法吗?

4

1 回答 1

1

如果给定小部件实现的特定字段不需要可​​搜索,我很想将它们放入序列化字段中。

class Page << AR
  has_many :embedded_widgets
  has_many :widgets, :through => :embedded_widgets
end

class Widget << AR
  has_many :embedded_widgets
end

class AboutMeWidget << Widget
class VideosWidget << Widget
... etc ...

class EmbeddedWidget << AR
  belongs_to :page
  belongs_to :widget
  serializes :data
end
于 2013-07-23T21:30:07.453 回答