基于重建用户的模块化网站

时间:2009-05-29 07:02:11

标签: mysql ruby-on-rails database modular

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

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

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

我考虑过这样做,每个模块获得一个与用户对应的ID,它的行和它在该行中的positiong。 (所以类似于.. user | column | row,等于1204 | 3 | 27,这意味着对于用户#1204,此模块将位于第3列和第27列的空格中。

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

此致

答案 1 :(得分: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 %>