2012-01-07 56 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個不同的意見,只有他們之間的微小差異。這對我來說似乎不是很乾,所以我正在尋求一些幫助來清理它。需要幫助幹什麼 - Rails 3.1

視圖之間只有幾件事情有所不同:

  1. @buckets.each - 該@buckets收集需要@notes@units藏漢之間切換。
  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 2012-01-07 23:31:38

+0

Maye你可以通過使用url_for helper來代替整個路徑參數嗎? 'url_for(資源)'應該給你每個項目的正確url。 – harald 2012-01-08 07:22:26

+0

好主意:D現在所有的工作,除了我不知道如何將new_resource_path傳入部分(new_resource_path)在.each塊之外? – Ammar 2012-01-08 10:06:06

0
  • 一種解決方案可能是編寫一個輔助函數來生成html。 人們通常不喜歡助手中的html,但在這種情況下,它是 是個好主意。編寫一個功能,在其中通過資源 名稱,它會爲您生成此代碼

  • 另一種方法是檢查您所在的控制器並根據此生成所需的代碼。例如

    資源= @buckets如果PARAMS [控制器] == '鬥'

    更濃縮的方式刪除if語句可能會像下面,但我havnt嘗試過了。

    EXEC 「資源= @#{PARAMS [:控制器]}的」

讓我知道如果你需要更多的幫助。

+0

我喜歡幫助功能的想法,但我不完全確定如何做到這一點。 除了在content_tags中嵌入strucutral HTML之外,我將如何去重新創建錨並且它是孩子? – Ammar 2012-01-07 23:26:10