Ruby on rails 如何按文件扩展名对Ruby/Rails中的键/值进行排序?
我有一个包含文件名的哈希。每个文件名都有不同类型的扩展名。。i、 e.(.txt、.bam、.bam.bai、.fastq等)我正试图找到一种方法来迭代这些键,并根据HTML/erb中的文件名将列表分为(3)三个部分。。。。像这样 第一节 所有FastQ文件(.FastQ) 第二节 所有.bam和bam.bai文件(.bam、.bam.bai) 第三节 所有文本文件(.txt) 基本上到目前为止我得到的是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
<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">
(<%= fdate.strftime("%m/%d/%Y") %>):
</div>
<div>
<%= seqfiles[file].join(", ") %>
</div>
<div style="clear: both; border-top: 1px solid #ddd;"> </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">
(<%= fdate.strftime("%m/%d/%Y") %>):
</div>
<div>
<%= seqfiles[file].join(", ") %>
</div>
<div style="clear: both; border-top: 1px solid #ddd;"> </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">
(<%= fdate.strftime("%m/%d/%Y") %>):
</div>
<div>
<%= seqfiles[file].join(", ") %>
</div>
<div style="clear: both; border-top: 1px solid #ddd;"> </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">
(<%= fdate.strftime("%m/%d/%Y") %>):
</div>
<div>
<%= seqfiles[file].join(", ") %>
</div>
<div style="clear: both; border-top: 1px solid #ddd;"> </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中还能工作吗?