我的控制器将此数组传递给视图:
@ipd = Ipdw.connection.select_all("select * from [My Preferences]")
这是我的观看代码:
<h1>Hello, Rails</h1>
<body>
<% @ipd.each do |ip| %>
<p><%= ip %></p>
<% end %>
</body>
这将显示在浏览器中:
{"Pref ID"=>1, "Source ID"=>1, "Username"=>"RS2559", "Field Name"=>"CATEGORY", "String Value"=>"IP Placemat Deliverables", "Integer Value"=>nil, "Decimal Value"=>nil, "Created Dt Tm"=>2009-08-10 03:01:36 UTC, "Update Dt Tm"=>2009-12-14 16:04:01 UTC}
{"Pref ID"=>2, "Source ID"=>1, "Username"=>"RS2559", "Field Name"=>"TYPE", "String Value"=>nil, "Integer Value"=>nil, "Decimal Value"=>nil, "Created Dt Tm"=>2009-08-10 03:01:40 UTC, "Update Dt Tm"=>2009-12-14 16:04:01 UTC}
...
我想在表格中显示"Username"
和"Field Name"
。如何在数组中循环以仅在可读的内容中显示这些列?
答案 0 :(得分:5)
看起来你的查询返回了一个哈希数组。只需使用键选择您感兴趣的值:
<% @ipd.each do |ip| %>
<p>
<%= ip['Username'] %><br />
<%= ip['Field Name'] %>
</p>
<% end %>
答案 1 :(得分:3)
如下:
<h1>Hello, Rails</h1>
<body>
<% @ipd.each do |ip| %>
<p>
<% ["Username", "Field Name"].each do |k| %>
<%= ip[k] %>
<% end %>
</p>
<% end %>
</body>
当然,这只会将值放在您的页面上。你可以做其他事情,比如建立一个桌子或制作子弹点等等。
这看起来像是:
<h1>Hello, Rails</h1>
<body>
<table>
<tr>
<% @field_names.each do |field_name| %>
<th>
<%= field_name %>
</th>
<% end %>
</tr>
<% @ipd.each do |ip| %>
<tr>
<% @field_names.each do |field_name| %>
<td>
<%= ip[field_name] %>
</td>
<% end %>
</tr>
<% end %>
</table>
</body>
这假设在你的控制器中你做了类似的事情:
@field_names = ["Username", "Field Name"]
这样,你可以在你的控制器中决定你想要的字段(以及以什么顺序),而不必使用你的html.erb文件。
如果你想在控制器中稍微提高一些标签名称,你可以这样做:
@label_mapping = {"Username"=>"User Name", "Field Name"=>"Field Name"}
然后:
<h1>Hello, Rails</h1>
<body>
<table>
<tr>
<% @field_names.each do |field_name| %>
<th>
<%= label_mapping[field_name] %>
</th>
<% end %>
</tr>
<% @ipd.each do |ip| %>
<tr>
<% @field_names.each do |field_name| %>
<td>
<%= ip[field_name] %>
</td>
<% end %>
</tr>
<% end %>
</table>
</body>
答案 2 :(得分:2)
可能有两种方式:
首先,您有这种数据的模型:
<% @ipd.each do |ip| %>
<p><%= ip.username %></p>
<% end %>
谢胜利: 您从外部数据库获得的数据集看起来像哈希。所以尝试这样的事情:
<% @ipd.each do |ip| %>
<p><%= ip["username"] %></p>
<% end %>
我认为第2类是你所需要的;)。
在视图中我不会使用较短的循环方式,因为代码的可读性会降低:abc.each{|letter| "<li>#{letter}</li>"}