重构代码到循环

时间:2012-10-12 00:11:52

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

目前我有

    <b>Step 1</b>    
      <%= @recipe_records.instruct_1 %>
     </p>   
    <p> 
    <b>Step 2</b>       
      <%= @recipe_records.instruct_2 %>
      </p>
    .....
    <b>Step 30</b>      
      <%= @recipe_records.instruct_30 %>
      </p>

如何将其置于循环中而不是列出所有30个步骤并且不显示空步骤?

    <% 30.times do |n|%>
        <% ri = @recipe_records.instruct_#{n+1}%>
        <%= if !ri.empty? %>
            <p>
            <%= ri %>
        <% end%>
    <% end %>

试过但无法工作。

2 个答案:

答案 0 :(得分:4)

<% 30.times do |n|%>
    <% ri = @recipe_records.send("instruct_#{n+1}")%>
    <%= unless ri.empty? %>
        <p/>
        <%= ri %>
    <% end%>
<% end %>

对于记录,我不同意您的访问者方法名称。您应该以数组方式访问条目,而不是每个条目都有访问者。例如@recipe_records [3]而不是@ recipe_records_3

答案 1 :(得分:0)

经过一番调整,我得到了以下工作代码:

<% 30.times do |n|%>
    <% ri = @recipes.send("instruct#{n+1}")%>
    <% unless ri.blank? %>
        <p>
        <b><%= "Step #{n+1}"%></b>
        <%= ri %>
        <p/>
    <% end%>
<% end %>