2012-06-27 77 views
0

我正在使用Rails 3,並構建了一個應用程序,用戶可以在其中放置要租用的對象。對於每一個對象,他可以決定:複雜的SQL查詢或控制器中的複雜處理?

  • 對象可以被整個世界所租用(潛在的)或沒有(對象訪問限制)
  • 對象只能由我的朋友們可以租用(在應用程序經由has_many friends, :through => friendship協會)
  • 的目的可以通過以下組的成員(然後,用戶選擇任一他所屬的所有組中,或這些的子集)

我的問題是如何租用顯示current_user可以看到的對象列表?我看到兩個選項,我想知道哪個是最好的或者它們是否相同:

1)在對象控制器中,構建用戶可以看到的對象集合(@objects = Object.can_see(current_user)),然後傳遞這到索引視圖並顯示整個列表

2)在控制器中,收集所有對象(@objects = Object.all),將其傳遞給索引視圖,並在視圖中爲每個對象執行一系列測試以確定是否該對象應顯示或不顯示。

回答

1

最終,真正由您來決定根據您看到項目的領先位置。儘管您確實有三個選項:

  1. 通過SQL語句處理整個查詢。
  2. 通過SQL語句處理一些初始過濾,然後過濾返回的數據。
  3. 通過SQL語句返回所有數據,並過濾返回的數據。

請記住,SQL db是內置執行快速數據訪問。如果您的解決方案沒有任何初始過濾,我會感到非常驚訝,除非您返回非常小的數據集進行過濾。最後,這涉及到你的邏輯有多複雜(它可以用SQL來表達並且仍然可以理解?),每個選項的性能如何,以及解決方案的可擴展性如何。

還有一些很好的ORM可以幫助模糊業務邏輯和數據訪問之間的界限。他們中的很多人會根據你的代碼動態地創建複雜的SQL,所以沒有太多的關注它會是多麼醜陋。