2014-10-17 48 views
0

範圍,軌道4,如何在我的模型添加我使用默認的範圍條件

def self.default_scope 
    where ('locked_at IS NULL') 
end 

,使任何人可以搜索鎖定的用戶,但我想,如果登錄用戶名爲admin,那麼他應該能夠找出鎖定的用戶,我不知道它將如何工作

在數據庫中,在用戶表中我有列名「admin」,它告訴我們誰是管理員。

我試圖在模型會議,但我認爲這不是一個好主意,請建議我別的東西

+0

我的回答有用嗎? – 2014-10-17 09:33:49

回答

2

首先,你不應該把方法和支架之間的空間與它的參數:

where('locked_at is NULL') 

二。如果您的管理員已登錄,你應該簡單地使用unscoped

User.unscoped 

避免使用默認的範圍。

+0

感謝馬瑞克.... – 2014-10-17 11:07:52

+0

@AmitAgarwal請標記我的答案,如果它幫助你接受。 – 2014-10-17 11:26:31

+0

我們可以只展示默認範圍嗎? – 2014-10-17 12:20:53

1

你可以用它unscoped返回該等級的範圍,而不考慮default_scope

事情是這樣的:

class User < ActiveRecord::Base 
     def self.default_scope 
     where ('locked_at IS NULL') 
     end 
end 

=> User.all   # Fires "SELECT * FROM users WHERE locked_at = NULL" 
=> User.unscoped.all if current_user.admin# Fires "SELECT * FROM users" 

不要忘了把if條件後未範圍。因爲正如你所提到的,用戶表有admin列,我假設它有布爾類型。如果它是true那麼只有它應該沒有範圍。

+0

謝謝gagan ... – 2014-10-17 11:35:12

+0

如果它對你有幫助,然後將其標記爲答案.. – 2014-10-17 11:39:21