在ruby中有更简洁的编码方式吗?

时间:2014-03-14 10:17:21

标签: ruby-on-rails ruby coding-style

有没有更好的方法来编写此代码?对我来说似乎有点冗长。

我正在使用太阳黑子SOLR,stored()方法返回nil或值数组,我总是想要第一个值,如果它存在,或者只打印一个空字符串就可以了。< / p>

 <td><%= search_result.stored(:seo_title).first() if search_result.stored(:seo_title).present?  %></td>
  <td><%= search_result.stored(:title).first() if search_result.stored(:title).present? %></td>
  <td><%= search_result.stored(:publish_at).first() if search.result.stored(:publish_at).present? %></td>

2 个答案:

答案 0 :(得分:6)

<%- [:seo_title, :title, :publish_at].each do |key| %>
  <td><%= search_result.stored(key).try(:first) %></td>
<% end %>

无论如何,如果只有3个键,我宁愿继续显式渲染所有3个表格单元格,这里的循环具有相同的行数并且看起来不太好。所以另一种选择是:

<td><%= search_result.stored(:seo_title).try(:first) %></td>
<td><%= search_result.stored(:title).try(:first) %></td>
<td><%= search_result.stored(:publish_at).try(:first) %></td>

答案 1 :(得分:0)

另一种选择是这样写:

<td><%= (search_result.stored(:seo_title) || []).first %></td>
<td><%= (search_result.stored(:title) || []).first %></td>
<td><%= (search_result.stored(:publish_at) || []).first %></td>