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 更改数组显示顺序

我的显示代码如下:

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

如您所见,上面的代码可以很好地按名称从左到右显示工具(例如 Hammer、Mallet、Screwdriver、Torch),但我的目标是从上到下显示它们如下所示的顺序:Ruby on Rails 更改数组显示顺序

在我链接的帖子中,有人建议使用.each_slice(3).to_a.transpose.flatten(尝试更正排序顺序),但是当我尝试在@tools返回的那个上时,我收到一条错误消息,指出element size differs.

关于如何实现这一点的任何想法都会很棒!

提前致谢。

4

1 回答 1

0

所有,谢谢你的意见。我想我仍然有点困惑,为什么这不会被视为我们可以解决的红宝石排序问题。在自己做了更多研究之后,我想出了如何解决这个问题。该解决方案的工作原理如下:

在我的toolkit_controller的索引方法中,我有以下内容:

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 回答