我正在使用Ruby on Rails,MySQL和Javascript开发一个网站。
网站是模块化的,这意味着用户可以自定义主页并将一个模块拖放到另一个模块中。有三列可以删除模块。 (想想iGoogle或Netvibes)
存储此数据的最佳方法是什么,以便用户返回主页时可以快速重建?
我考虑过这样做,每个模块获得一个与用户对应的ID,它的行和它在该行中的positiong。 (所以类似于.. user | column | row,等于1204 | 3 | 27,这意味着对于用户#1204,此模块将位于第3列和第27列的空格中。
然后当用户返回时,只需循环,每个都加1,直到到达列的末尾,然后从另一个开始,直到填充所有3列。
我觉得这会非常缓慢,而且必须有更好的方法来做到这一点。
有什么建议吗?主要是寻找数据库结构,但是如果你有一些可以与之相关的Rails代码,我不介意看到git。
答案 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 %>