1

我正在用 Ruby on Rails、MySQL 和 Javascript 开发一个网站。

该网站是模块化的,这意味着用户可以自定义他们的主页并将一个模块拖放到另一个它将存在的区域。可以删除模块的三列。(想想 iGoogle 或 Netvibes)

存储这些数据的最佳方式是什么,以便用户返回主页时可以快速重建?

我考虑过这样做的方式是,每个模块都获得一个对应于用户的 ID,它是行并且它在该行中的位置。(所以类似 ..user|column|row 的内容等于 1204|3|27,这意味着对于用户 #1204,此模块将位于第 3 列,距离顶部 27 个空格。

然后,当用户返回时,只需循环遍历,每个添加 1 直到它到达列的末尾,然后从另一列重新开始,直到所有 3 列都被填充。

我觉得这会很慢,而且必须有更好的方法来做到这一点。

有什么建议么?主要是寻找数据库结构,但如果你有一些与此相关的 Rails 代码,我不介意在 git 中看到。

4

2 回答 2

1

我认为最好的方法是将您的数据保存在单个文本字段中

例如 1204|3|27 应该在一个文本字段中......每个用户 id 都有一个良好的索引,您应该非常快速地获得配置。之后,您只需要“分解”“|”的配置 .

问候

于 2009-05-29T07:59:17.920 回答
0

我说的很直接:

class ModuleInstallation < AR::Base
  belongs_to :user
  belongs_to :module
  validates_presence_of :column
  validates_presence_of :row
end

class User < AR::Base
  has_many :module_installations, :order => :column
  has_many :modules, :through => :module_installations
end

然后让您的控制器处理更多排序,类似这样的事情(未经测试,但请查看它和我用来获取概念的方法的文档):

@columns = current_user.module_installations.group_by(&:column)
@columns.each { |column, modules| modules.sort! { |x,y| x.row <=> y.row } }

那么你的看法就比较简单了:

<% @columns.each do |column, modules| %>
  <div class="column-<%= column %>">
    <% modules.each do |module| %>
      <div class="module">
        <%= module.to_html %>
      </div>
    <% end %>
  </div>
<% end %>
于 2009-05-29T16:44:20.750 回答