0

データベースから受け取ったアイテムを並べ替えようとしています。現在、Toolモデルから返される一連のオブジェクトがあります。現在、次のコード ( toolkit_controller 内)を使用して、データベースからいくつかのツールを取得しています。

 def index 
 @tools = Tool.order('name ASC').all
 end

これはうまく機能しているようで、意図したとおりです。これを行うと、次の結果セットが得られます (わかりやすくするために、余分な結果の一部を省略しています)。

 [#<Tool id: 1, name: "Hammer", description: "A basic hammer", 
 created_at: "2013-07-07 16:46:13",
 updated_at: "2013-07-07 16:46:15">, 
 #<Tool id: 2, name: "Mallet", description: "A fancy 
 mallet", created_at: "2013-07-07 16:46:13", updated_at: "2013-07-07 16:46:15">, 
 #<Tool id: 3, name: "Screwdriver", description: "A screwdriver", 
 created_at: "2013-07-07 16:46:13", updated_at: 
 "2013-07-07 16:46:15">, 
 #<Tool id: 4, name: "Torch", description: "A cheap torch", created_at: 
 "2013-07-07 16:46:13", updated_at: "2013-07-07 16:46:15">, ....]

私が今苦労しているのは、自分のツールをerbページで (横ではなく) 縦に表示する方法です。必要な並べ替え順序を明確に理解するには、次の投稿をご覧ください: Ruby on Rails change array display order

私の表示コードは次のとおりです。

<%= @count = 0 %>

<div>
    <% @tools.each do |t| %>
        <% @count = @count+1 %>

            <div class="individualTool">
                <%= t.name %> <%= @count %>
            </div>

       <% if @count == 4 %>

           <% @count = 0 %>
       </div>

       <div class="row-fluid">

       <% end %>

   <% end %>

ご覧のとおり、上記のコードはツールを左から右に名前 (例: ハンマー、マレット、スクリュードライバー、トーチ) で表示するのに問題なく機能しますが、ここでの私の目標はツールを上から下に表示することです。ここに表示される順序: Ruby on Rails は配列の表示順序を変更します

リンクした投稿で、誰かが.each_slice(3).to_a.transpose.flatten(並べ替え順序を試して修正するために) を使用することを提案しまし@toolsたが、返された でそれを試したところ、element size differs.

これをどのように達成できるかについてのアイデアは素晴らしいでしょう!

前もって感謝します。

4

1 に答える 1

0

皆様、ご意見ありがとうございます。なぜこれが私たちが解決できるルビのソート問題とみなされないのか、私はまだ少し混乱していると思います. 自分でもう少し調査を行った後、問題を解決する方法を見つけました。ソリューションは次のように機能します。

toolkit_controllerの index メソッドには、次のものがあります。

def index
@tools = Tool.order('name ASC').all
aAllTools = []

for i in @tools
  aHashedTool = {}
  aHashedTool["name"] = i.name
  aHashedTool["description"] = i.description
  aAllTools << aHashedTool
end


@outcome = aAllTools.each_slice(4).to_a.transpose.flatten  # Corrects the order. 
logger.debug "#{@outcome}"  # Verified. Order is now correct.

 end

上記のコードを使用することで、質問で行っていたように値を単純にループすることができ、すべてが機能しているようです。より最適な解決策がある場合 (または、CSS の質問も投稿する必要があるかもしれません)、喜んでそれを楽しませていただきます。返信ありがとうございます。

于 2013-07-08T00:32:39.713 に答える