2014-07-16 79 views
0

我只是在學習ruby,並且想要練習編寫rails的小幫手方法,作爲修改基礎知識的好方法。 我想要做的就是爲範圍對象提供一個計數器。簡單的ruby方法幫手

所以在我看來,我寫這篇文章

=stats_counter_for(with_pending_state) 

「pending_state」是模型的特定範圍。

def stats_counter_for(object_state) 
    Photo.object_state.count 
end 

所以我想通過這個來提供所有項目的計數與待處理狀態。

所以最終我可以做

=stats_counter_for(with_active_state) 
=stats_counter_for(with_inactive_state) 

(等號是從HAML視圖)

更新錯誤信息

undefined local variable or method `with_pending_state' for #<#<Class:0x007fbce1118230>:0x007fbce1123770> 
=link_to '/ Pending Approval', pending_admin_entries_path 
=stats_counter_for(with_pending_state) 
=link_to '/ Rejected', rejected_admin_entries_path 

我要去哪裏錯了嗎?我相信這非常簡單。

+0

你在你的application_helper.rb文件或模型寫這個? – Edmund

+0

應用幫手 –

+0

你能粘貼確切的錯誤嗎?如果它在你的應用程序幫手中,它應該工作 – Edmund

回答

4

可以使用send方法:

def stats_counter_for(state) 
    Photo.send("with_#{state}_state").count 
end 

所以在你的意見,你可以用它這樣的:

= stats_counter_for(:active) # or as a string 'active' 
= stats_counter_for(:inactive) 
+0

你也可以通過批發方式傳遞方法名:'Photo.send(state).count'然後'stats_counter_for(:with_active_state)'。 – tadman

+0

是的,我知道,但我認爲如果在視圖中頻繁使用它會太重複。 – backpackerhh

+0

是的,我更喜歡你的方法,但只是提到一個更通用的解決方案。 – tadman