2013-03-14 33 views
0

我正在使用Rails 3.0.9Ruby on Rails3如何在不改變太多現有代碼的情況下過濾數據

我的項目只是爲單個羣組創建的。現在我想增強我的項目以啓用多個組的訪問權限。在我的數據庫中,我會在用戶表和活動表中添加一個新列。 架構更改: 表:用戶ID , 名, GROUP_ID#新增

表:活動 ID, ACTIVITY_NAME, GROUP_ID#新增

現在,如果users.group_id是1,在活動頁面上,用戶只能使用activities.group_id = 1查看數據。

由於此處存在大量的代碼和邏輯,因此我不想更改控件和視圖。該數據過濾器也發生在其他表格上。 我知道有一種方法可以使用current_user.activities.find(:all),但它會影響我項目中幾乎所有的代碼。

有沒有什麼辦法可以配置特定用戶的數據過濾器而不需要改變太多代碼?

在此先感謝!

+1

你試過範圍嗎? http://guides.rubyonrails.org/active_record_querying.html#scopes和默認範圍http://guides.rubyonrails.org/active_record_querying.html#applying-a-default-scope – 2013-03-14 07:45:09

+1

範圍是要走的路,但我會不鼓勵使用default_scope。它可能會導致意想不到的副作用。作爲一個快速回答:您至少需要更改您的控制器代碼 - 這個問題不僅僅是業務邏輯,還有表示邏輯。沒有神奇的方法來自動支持您的規格變化!這就是爲什麼鼓勵使用範圍的原因:如果您的業務邏輯已經使用它們,那麼您只需修改它們即可。另一方面,如果你所有的「查找」邏輯都在你的控制器中,你將會有一段糟糕的時間。 – 2013-03-14 08:46:36

回答

0

退房租賃寶石。 https://github.com/yoolk/tenancy

如果您設置Group.current = group,它會將group_id = Group.current.id添加到所有查詢中對象爲scoped_to group的所有查詢中。

它非常乾淨,爲您的每個模型添加了〜3行代碼。我的application_controller在Devise登錄後設置Group.current。 (另外~3行代碼)

相關問題