Ruby on rails 如何按文件扩展名对Ruby/Rails中的键/值进行排序?

Ruby on rails 如何按文件扩展名对Ruby/Rails中的键/值进行排序?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个包含文件名的哈希。每个文件名都有不同类型的扩展名。。i、 e.(.txt、.bam、.bam.bai、.fastq等)我正试图找到一种方法来迭代这些键,并根据HTML/erb中的文件名将列表分为(3)三个部分。。。。像这样 第一节 所有FastQ文件(.FastQ) 第二节 所有.bam和bam.bai文件(.bam、.bam.bai) 第三节 所有文本文件(.txt) 基本上到目前为止我得到的是 <div class="content_box_title">Sequenci

我有一个包含文件名的哈希。每个文件名都有不同类型的扩展名。。i、 e.(.txt、.bam、.bam.bai、.fastq等)我正试图找到一种方法来迭代这些键,并根据HTML/erb中的文件名将列表分为(3)三个部分。。。。像这样

第一节 所有FastQ文件(.FastQ)

第二节 所有.bam和bam.bai文件(.bam、.bam.bai)

第三节 所有文本文件(.txt)

基本上到目前为止我得到的是

<div class="content_box_title">Sequencing Results</div>
  <div class="content_box">
    <% seqfiles = @vmsr_project.seqfiles %>
    <% seqfiles.keys.sort.each do |file|


      fpath = file.to_s

      fsize = File.size(file)
      fdate = File.mtime(file)
      `enter code here`fsize = fsize / 1000000
      fsize = fsize.to_int
      fsize = fsize.to_s
      if fsize == "0" then fsize = "EMPTY or <1" end
      %>
      <div style="float: left">
        <%= link_to File.basename(file), {:action => "send_analysis_file", :project => @vmsr_project[:proj_id], :file => file }, { :onmouseover => "Tip('<div class=\\'tooltip\\'>Click to download. <p style=\\'color: #e26666;\\'>" + fsize + " MB</p></div>', TITLE, 'Download File')", :onmouseout => "UnTip()" } %>
      </div>
      <div style="float: left">
        &nbsp;(<%= fdate.strftime("%m/%d/%Y") %>):
      </div>
      <div>
        &nbsp;&nbsp;<%= seqfiles[file].join(", ") %>
      </div>
      <div style="clear: both; border-top: 1px solid #ddd;">&nbsp;</div>

        <div style="float: left">
         <!--  <%= fpath %> -->
        </div>


    <% end %>

    <% if seqfiles.empty? %>
      <ul><li>None</li></ul>
    <% end %>

  </div>


  <div class="content_box_title">Aligned</div>
  <div class="content_box">
    <p>.bam, .bam.bai files display here</p>

  </div>

  <div class="content_box_title">QC</div>
  <div class="content_box">
    <p>.txt files display here</p>

  </div>
测序结果
“发送分析文件”、:project=>@vmsr\u project[:proj\u id]、:file=>file}、{:onmouseover=>“提示('点击下载。

”+fsize+“MB

',TITLE,'download file')、:onmouseout=>“untp()”}%> ():
    • 对齐的 .bam、.bam.bai文件显示在此处

      质量控制 .txt文件显示在此处

作为更新,每个人。。。我做了以下工作(请不要笑,我是新手),但现在的问题当然是标题: 测序结果 每次在所有三个部分中解析时打印。绝对需要重构

<% seqfiles.keys.sort.each do |file|

fpath = file.to_s

fsize = File.size(file)
fdate = File.mtime(file)
fsize = fsize / 1000000
fsize = fsize.to_int
fsize = fsize.to_s
if fsize == "0" then fsize = "EMPTY or <1" end

  case fpath
    when /\.fastq.gz$/ %>
      <div class="content_box_title">Sequencing Results</div>
        <div class="content_box">
          <div style="float: left">
            <%= link_to File.basename(file), {:action => "send_analysis_file", :project => @vmsr_project[:proj_id], :file => file }, { :onmouseover => "Tip('<div class=\\'tooltip\\'>Click to download. <p style=\\'color: #e26666;\\'>" + fsize + " MB</p></div>', TITLE, 'Download File')", :onmouseout => "UnTip()" } %>
          </div>
          <div style="float: left">
            &nbsp;(<%= fdate.strftime("%m/%d/%Y") %>):
          </div>
          <div>
            &nbsp;&nbsp;<%= seqfiles[file].join(", ") %>
          </div>
          <div style="clear: both; border-top: 1px solid #ddd;">&nbsp;</div>
        </div>

  <% when /\.bam(\.bai)?$/ %>
      <div class="content_box_title">Aligned</div>
        <div class="content_box">
          <div style="float: left">
            <%= link_to File.basename(file), {:action => "send_analysis_file", :project => @vmsr_project[:proj_id], :file => file }, { :onmouseover => "Tip('<div class=\\'tooltip\\'>Click to download. <p style=\\'color: #e26666;\\'>" + fsize + " MB</p></div>', TITLE, 'Download File')", :onmouseout => "UnTip()" } %>
          </div>
          <div style="float: left">
            &nbsp;(<%= fdate.strftime("%m/%d/%Y") %>):
          </div>
          <div>
            &nbsp;&nbsp;<%= seqfiles[file].join(", ") %>
          </div>
          <div style="clear: both; border-top: 1px solid #ddd;">&nbsp;</div>
        </div>

  <% else %>
      <div class="content_box_title">QC</div>
        <div class="content_box">
          <div style="float: left">
            <%= link_to File.basename(file), {:action => "send_analysis_file", :project => @vmsr_project[:proj_id], :file => file }, { :onmouseover => "Tip('<div class=\\'tooltip\\'>Click to download. <p style=\\'color: #e26666;\\'>" + fsize + " MB</p></div>', TITLE, 'Download File')", :onmouseout => "UnTip()" } %>
          </div>
          <div style="float: left">
            &nbsp;(<%= fdate.strftime("%m/%d/%Y") %>):
          </div>
          <div>
            &nbsp;&nbsp;<%= seqfiles[file].join(", ") %>
          </div>
          <div style="clear: both; border-top: 1px solid #ddd;">&nbsp;</div>
        </div>
  <% end %>
<% end %>

<% if seqfiles.empty? %>
  <ul><li>None</li></ul>
<% end %>

测序结果
“发送分析文件”、:project=>@vmsr\u project[:proj\u id]、:file=>file}、{:onmouseover=>“提示('点击下载。

”+fsize+“MB

',TITLE,'download file')、:onmouseout=>“untp()”}%> (): 对齐的 “发送分析文件”、:project=>@vmsr\u project[:proj\u id]、:file=>file}、{:onmouseover=>“提示('点击下载。

”+fsize+“MB

',TITLE,'download file')、:onmouseout=>“untp()”}%> (): 质量控制 “发送分析文件”、:project=>@vmsr\u project[:proj\u id]、:file=>file}、{:onmouseover=>“提示('点击下载。

”+fsize+“MB

',TITLE,'download file')、:onmouseout=>“untp()”}%> ():

只需将文件名分成3个数组,然后对每个数组进行迭代即可

<% separated = seqfiles.keys.sort.inject({}){|h,key|
  case key.to_s
  when /\.fastq$/
    h[:fastq] ||= []
  when /\.bam(\.bai)?$/
    h[:bam] ||= []
  else
    h[:other] ||= []
  end.push(key)
  h
} %>

<% separated[:fastq].each do |file| %>
  ...
<% end %>

<% separated[:bam].each do |file| %>
  ...
<% end %>

<% separated[:other].each do |file| %>
  ...
<% end %>

...
...
...

您可能需要检查欢迎使用堆栈溢出。您缺少一个哈希示例和输出内容。读作“及”。另外,不要用代码填充视图。这应该在控制器中执行,并将结果分配给变量,然后在视图中访问该变量。不要像编写旧PHP那样编写Rails视图。这非常聪明。非常感谢!还感谢魔杖制造商和锡人的建议。代码的第一部分似乎正常工作,或者至少没有抛出异常。。。。但是当我尝试进行迭代时,它似乎是nil类?nil:nilclass的未定义方法'each'只要检查
separated[:fastq]
是否存在,这同样适用于其他类必须是安全的。。。我正在做的项目非常非常古老。。。它是ruby 1.8和Rails 2.3。上面的代码在Rails2.3中还能工作吗?