2009-05-29 3 views
1

Я разрабатываю сайт в Ruby on Rails, MySQL и Javascript.Реконструкция Пользовательский модульный сайт

Веб-сайт является модульным, что означает, что пользователь может настроить свою домашнюю страницу и перетащить один модуль в другую область, в которой он будет жить. есть три столбца, где модуль можно отбросить. (Think iGoogle или Netvibes)

Каков наилучший способ хранения этих данных, чтобы при возврате пользователя домашняя страница могла быть быстро восстановлена?

Я рассматривал возможность делать это так, чтобы каждый модуль получил идентификатор, соответствующий пользователю, это строка и позиция positiong в этой строке. (Итак, что-то вроде: user | column | row, равно 1204 | 3 | 27, что означает, что для пользователя # 1204 этот модуль будет находиться в столбце № 3 и 27 пробелов сверху.

Затем, когда пользователь возвращает , просто зацикливайтесь, добавляя по 1 к каждому, пока он не достигнет конца столбца, и не начните снова на другом, пока не будут заполнены все 3 столбца.

Я чувствую, что это было бы очень медленно, хотя и должно быть лучший способ сделать это.

есть предложения? в основном ищут структуры базы данных, но если у вас есть некоторые Rails код, который corrilate к этому я был бы не против Seein мерзавца.

ответ

1

Я считаю, что лучше всего хранить ваши данные в одном текстовом поле

Например, 1204 | 3 | 27 должно быть в текстовом поле ... с хорошим индексом на идентификатор пользователя, вы должны получить конфигурацию очень быстро. После этого вам просто нужно «взорвать» вашу конфигурацию для «|» ,

С уважением

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 

Тогда пусть ваш контроллер обрабатывать любые более сортировки, что-то вроде этого (непроверенные, но смотреть через него и документации по методам I» м, используя для получения понятий):

@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 %>