将Rails视图重构为DRY

时间:2012-12-16 06:49:47

标签: html ruby ruby-on-rails-3.1 refactoring views

我不确定标题是否代表我的实际问题,但由于我对编程相对较新,所以我能想出的最好。如果你有更好的东西,请告诉我?

我想重构我当前的视图,使其更易于管理并与DRY方法保持一致。

我的观点:

     <div class="row">
        <div class="span8">
        <% @photos.each_with_index do |photo, index| %>
          <% if index == 0 %>
          <!-- <h1><%= photo.title %></h1> -->
            <img src="<%= photo.image_url.to_s %>">
          <% end %>
        <% end %>
        </div>

        <div class="span4">
        <% @photos.each_with_index do |photo, index| %>
          <% if index == 2 %>
          <!-- <h1><%= photo.title %></h1> -->
          <img src="<%= photo.image_url.to_s %>">
          <% end %>
        <% end %>
        </div>

        <div class="span4">
        <% @photos.each_with_index do |photo, index| %>
          <% if index == 3 %>
          <!-- <h1><%= photo.title %></h1> -->
          <img src="<%= photo.image_url.to_s %>">
          <% end %>
        <% end %>
        </div>
      </div><!--/.row -->

      <div class="row">
        <div class="span8 pull-right">
        <% @photos.each_with_index do |photo, index| %>
          <% if index == 4 %>
          <!-- <h1><%= photo.title %></h1> -->
            <img src="<%= photo.image_url.to_s %>">
          <% end %>
        <% end %>
        </div>

       <div class="span4">
        <% @photos.each_with_index do |photo, index| %>
          <% if index == 2 %>
          <!-- <h1><%= photo.title %></h1> -->
          <img src="<%= photo.image_url.to_s %>">
          <% end %>
        <% end %>
        </div>

        <div class="span4">
        <% @photos.each_with_index do |photo, index| %>
          <% if index == 3 %>
          <!-- <h1><%= photo.title %></h1> -->
          <img src="<%= photo.image_url.to_s %>">
          <% end %>
        <% end %>
        </div>
      </div><!--/.row -->

我的控制器:

 def index
    if params[:tag]
      @photos = Photo.tagged_with(params[:tag])
    else  
      @photos = Photo.order("created_at DESC")
    end

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @photos }
    end
  end

如果我只想展示几张照片,这不会有问题。但是,由于此视图基本上是每张上传照片的Feed,因此很快就无法管理。特别是当我必须引用他们的索引说100/1000 / 10,000张照片时。有没有更好的方法来重构这个观点?记住改变的spans8,span4,span4然后反转span4,span4,span8等等。

1 个答案:

答案 0 :(得分:1)

试试这个:

<% @photos.each_with_index do |photo, index| %>
  <div class="row">
    <div class="span<%= cycle(8, 4, 4) %>">
      <!-- <h1><%= photo.title %></h1> -->
      <img src="<%= photo.image_url.to_s %>">
    </div>
  </div>
<% end %>