2014-01-23 2 views
0

두 부분 사이에서 루프의 수익을 배포내가 기본적으로 두 가지 템플릿을 가지고

@posts.each do |post| 
    <h3> post.title </h3> 
    <p> post.body </p> 
    <hr /> 

내가 yield<section>...을 대체 할 수있는 모든 게시물을 이 구역. 이제 내가하고 싶은 일은 매 턴마다이 두 섹션을 똑같이 채우도록이 작업을 번갈아 수행하는 것입니다. 이 작업을 수행하는 데 비교적 쉬운 방법이있을 것이라고 확신합니까? 나는 어떻게 든 지금은 생각할 수 없다.

편집 : 나를 잘못하지 마십시오. 첫 번째 템플릿은 두 번째 템플릿과 병합 될 수 있습니다.

답변

1

첫 번째 섹션에서이 작업을 수행 :

@posts.select.each_with_index{|_,i| i.even? } 

이를 다른 하나에 :

@posts.select.each_with_index{|_,i| i.odd? } 

당신이 요소가 열 번갈아되지 않도록 신경하지만 정상을하지 않는 경우 아래쪽에, 당신은 할 수있다 :

<article> 
    <% @posts.in_groups(2, false) do |grouped_posts| %> 
    <section> 
    <% grouped_posts.each do |post| %> 
    <h3> post.title </h3> 
    <p> post.body </p> 
    <hr /> 
    <% end %> 
    </section> 
    <% end %> 
</article> 

당신은 012를 위해 필요한 비트를 끌어 당길 수있다 활성 지원 보석에서 3,

require 'active_support/core_ext/array/grouping' 

하거나 매우 유사하게 작동이 다른 방법 사용할 수 있습니다

@posts.each_slice((@posts.size/2.0).ceil).to_a 

유일한 차이점은 다음과 같습니다

@posts = [] 

@posts.in_groups(2, false)       #=> [[], []] 
@posts.each_slice((@posts.size/2.0).ceil).to_a  #=> [] 
+0

감사합니다! 마지막 섹션은 정확히 내가 원하는 것 같습니다. 그러나 나는 Sinatra를 사용하고 있으며'in_groups()'는 Rails 메소드 인 것 같습니다. : – user3094719

+0

gemfile에'gem 'activesupport''를 추가하고'active_support/core_ext/array/grouping'을'require '해야합니다. 또는 https://github.com/rails/rails/에서 복사 할 수 있습니다. –

+0

두번째 인수로'in_groups'을 추가했습니다. 그렇지 않으면, 홀수 개의 원소가있을 때'nil'이 생깁니다. 또한 Rails를 필요로하지 않는 또 다른 옵션을 추가했습니다. –

관련 문제