2012-01-07 2 views
0
.row 
    .nine.columns.centered 
     %ul.bucketlist 

      - @buckets.each_with_index do |resource, index| 
       %a{:href => "#{bucket_path(resource)}"} 
        %li.bucket 
         %h4= index + 1 
         %h5= resouce.name 

      %a{:href => "#{new_bucket_path}"} 
       %li.bucket.empty 
        = image_tag "add.gif" 
        %h5 Add Bucket 

위의 코드는 3 가지 다른보기로 작성되었으며 위 코드는 사소한 차이점이 있습니다. 이것은 나에게 매우 마른 것처럼 보이지 않으므로 이것을 정리할 도움을 찾고 있습니다. 뷰 사이 도움 요청 DRYing-Rails 3.1

는 몇 가지 변화 :

  1. @buckets.each을 - @buckets 컬렉션 @notes, @units aswell 사이를 전환 할 필요가있다.
  2. #{bucket_path} - bucket_path가 resource_path가되도록 변수를 전달하고 싶습니다.

누구든지 도움을 제공 할 수 있다면 많은 도움이됩니다.

답변

2

HAML와 내 경험이 제한되어 있지만 (예를 들어, _common.html.haml라는 이름의 파일)이 부분에 공통 코드를 삽입 할 수 있어야한다고 생각하고보기에 간단하게 수행

= render 'common', :items => @buckets, :new_item_path => new_bucket_path 

그런 다음 부분을 다음과 같이 변경하십시오.

%ul.bucketlist 
    - items.each_with_index do |resource, index| 
     %a{:href => url_for(resource)} 
      %li.bucket 
       %h4= index + 1 
       %h5= resouce.name 

    %a{:href => "#{new_item_path}"} 
     %li.bucket.empty 
      = image_tag "add.gif" 
      %h5 Add Item 
+0

좋지만 경로를 부분으로 전달하는 데 문제가 있습니다. 경로를 bucket_path (버킷)로 출력해야하므로 어떻게 부분을 보내겠습니까? – Ammar

+0

Maye 대신 url_for 도우미를 사용하여 경로 인수를 모두 삭제할 수 있습니까? 'url_for (resource)'는 각 항목에 대한 올바른 URL을 제공해야합니다. – harald

+0

우수 아이디어 : D new_resource_path를 부분 (new_resource_path)에 전달하는 방법을 모르는 것을 제외하고는 이제 모두 작동합니다. 각 블록 외부에 있습니까? – Ammar

0
  • 하나의 솔루션은 html을 생성하는 도우미 함수를 작성할 수 있습니다. 사람들은 일반적으로 헬퍼에서 HTML을 좋아하지 않지만이 경우에는 이 좋습니다. 리소스 이름을 전달하고이 코드를 생성하는 함수를 작성하십시오.

  • 또 다른 방법은 현재있는 컨트롤러를 확인하고이를 기반으로 필요한 코드를 생성하는 것입니다. 예를

    자원 = @buckets 경우 PARAMS [컨트롤러] == '버킷'

    문은 다음과 같은 것이 있으면 제거하는 더 압축 된 방식으로,하지만 난 그것을 밖으로 시도 havnt.

    간부 "자원 = @ 번호 {PARAMS [: 컨트롤러]}의"

더 많은 도움이 필요하면 알려주세요.

+0

저는 헬퍼 기능에 대한 아이디어가 마음에 들지만, 어떻게해야할지 모르겠습니다. content_tags 내에 구조 HTML을 중첩하는 것 외에도 앵커와 자식을 어떻게 재현 할 수 있습니까? – Ammar