1

產生的輔助方法我想產生一些計數方法動態的型號名稱,我就可以在視圖/輔助使用給定的數組:的Ruby/Rails元編程:在飛行

# create dynamic count methods for each model we want     
    ['model', 'other_model', 'next_model'].each do |name| 
    class_eval{ 
     "def total_#{name.underscore}s_count 
      total_#{name.underscore}s_count ||= #{name.camelcase}.all.count 
     end" 
     } 
    end 

然而,我有幾個問題:

  1. 如果我希望能夠在視圖中調用這些方法,該代碼應該到哪裏去?
  2. 將這些方法添加到什麼類?例如,我會怎樣去調用它們,因爲我不確定它們是否屬於用戶等類,因爲它們是針對一堆模型的。
  3. 有沒有更好的方法來做到這一點?
+0

什麼是total_model_count在Model.count的優勢在哪裏? – 2011-06-08 15:00:15

+0

保持直接模型調用我的意見 – iwasrobbed 2011-06-08 15:13:50

回答

1

您試圖解決的問題(保持您的視圖不符合模型方法)並不是通過將相同的邏輯委派給視圖幫助器來解決的。如果你想堅持MVC約定來保持你的視圖不觸發SQL查詢,你應該在你的控制器中這樣做。

def index 
    models = Foo, Bar, Bat 
    @counts = models.inject({}) do |result, model| 
    result[model.name.downcase.to_sym] = model.count 
    result 
    end 
end 

你就必須每個模型的計數的一個很好的哈希值傳遞:

@counts #=> { :foo => 3, :bar => 59, :bat => 42 } 
+0

有道理,謝謝科裏 – iwasrobbed 2011-06-08 17:46:13