Реконструкция Модульный сайт на основе пользователя - PullRequest
1 голос
/ 29 мая 2009

Я занимаюсь разработкой веб-сайтов на Ruby on Rails, MySQL и Javascript.

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 29 мая 2009

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

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

Привет

0 голосов
/ 29 мая 2009

Я говорю модель очень просто:

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