我有这个哈希。我试图在视图中呈现。我对Rails这么新,我没有丝毫的线索如何做到这一点。我需要做的就是能够通过service_name或者按照主机和构建块对事物进行排序。我已经尝试了十几种东西,但我似乎无法正常使用,所以我现在需要任何帮助。
我想要做的一个例子:
下面是哈希。到目前为止,我得到的最好的服务名称是独立列出的,无需排序或其他任何内容。
services_hash = {
:status => "successful",
:service_list => [
{
:service_name => "oozie",
:status => "RUNNING",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "single-namenode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "single-database",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "datanode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "secondarynamenode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "web",
:status => "DEAD",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "tasktracker",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "jobtracker",
:status => "RUNNING",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "oozie",
:status => "RUNNING",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "single-namenode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "single-database",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "datanode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "secondarynamenode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "web",
:status => "DEAD",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "tasktracker",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "jobtracker",
:status => "RUNNING",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "oozie",
:status => "RUNNING",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "single-namenode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "single-database",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "datanode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "secondarynamenode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "web",
:status => "DEAD",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "tasktracker",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "jobtracker",
:status => "RUNNING",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "oozie",
:status => "RUNNING",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "single-namenode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "single-database",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "datanode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "secondarynamenode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "web",
:status => "DEAD",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "tasktracker",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "jobtracker",
:status => "RUNNING",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "oozie",
:status => "RUNNING",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "single-namenode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "single-database",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "datanode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "secondarynamenode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "web",
:status => "DEAD",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "tasktracker",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "jobtracker",
:status => "RUNNING",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "oozie",
:status => "RUNNING",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "single-namenode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "single-database",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "datanode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "secondarynamenode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "web",
:status => "DEAD",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "tasktracker",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "jobtracker",
:status => "RUNNING",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "oozie",
:status => "RUNNING",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "single-namenode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "single-database",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "datanode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "secondarynamenode",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "web",
:status => "DEAD",
:status_message => "Running Master Service",
:host => "1"
},
{
:service_name => "tasktracker",
:status => "RUNNING",
:status_message => "Running Service",
:host => "1"
},
{
:service_name => "jobtracker",
:status => "RUNNING",
:status_message => "Running Master Service",
:host => "1"
}
]
}
修改 以下是我尝试过的两件事,其他人帮助我得出了排序的结论。两者都有所作为。但是当我把这些想法结合起来时,我失败了。我已经废弃了我的组合工作,希望找到一个答案如何做到这一点,所以我可以迭代哈希重现上面的图像到某种效果。
注意目前我意识到HTML的输出不会完全类似于图像。现在我被它的if-else部分困住了,因为我正在尝试它的方式似乎跳过了它。
<%
val = @service_hash
svcs = val[:service_list]
puts "#{svcs.size} service entries."
grouped = svcs.group_by { |svc| svc[:service_name] }
puts "#{grouped.size} named services:"
grouped.keys.sort.each do |name|
puts " service: #{name}"
grouped[name].each do |svc|
puts " host: #{svc[:host]}"
puts " status: #{svc[:status]}"
puts " #{svc[:status_message]}"
end
puts '-'*40
end
%>
答案 0 :(得分:1)
在Ruby on Rails中puts
不写入输出缓冲区。在ERB中,<%= %>
内的代码块的返回值将写入输出。因此,在您看来,您的代码看起来应该更像这样:
# ERB View Template
<%
val = @service_hash
svcs = val[:service_list] # This should probably be done in a controller rather than a view.
%>
<%= svcs.size %> service entries.
<%
grouped = svcs.group_by { |svc| svc[:service_name] } # Again, this should probably be in a controller
%>
<%= grouped.size %> named services:
<% grouped.keys.sort.each do |name| %>
service: <%= name %>
<% grouped[name].each do |svc| %>
host: <%= svc[:host] %>
status: <% svc[:status] %>
<%= svc[:status_message] %>
<% end %>
<%= '-'*40 %>
<% end %>