1

Ruby on Rails、MySQL、および Javascript で Web サイトを開発しています。

Web サイトはモジュール式です。つまり、ユーザーはホームページをカスタマイズし、1 つのモジュールを別の場所にドラッグ アンド ドロップできます。モジュールをドロップできる列が 3 つあります。(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 に答える