2012-06-24 48 views
1

我有在我的用戶登錄,他們與給定公司相關聯的應用程序。我想爲我的所有模型添加一個默認範圍,以便用戶只能看到他們公司的數據。所以在我的Location模型我想:如何在我的default_scope調用中使用會話變量?

default_scope where(:company_id => session[:company_id])

而不是通過我的應用程序亂扔垃圾這些。我的想法是,以確保安全,使默認Location查詢始終被限制在當前用戶COMPANY_ID。我所有的其他車型都以某種方式相關聯回Location所以這應該是隻有我需要這樣做的地方。

我有一些關注着和我的想法,這樣做是一個壞主意(儘管我看不到你會如何真正做到這一點)。

我其實能做到這一點,如果是的話怎麼辦?有沒有更好的方法呢?

+0

我剛剛嘗試過同樣的事情,你也來過這個邏輯嗎?還是隻記得將會話變量包含/應用於所有查詢? Mortiz解決方案似乎乾淨 - 有興趣在你想通任何分辨率? –

回答

2

我的辦法就是讓你的ApplicationController內的私有方法:

class ApplicationController < ActionController::Base 

    helper_method :my_model 

    def my_model 
    Model.where(:company_id => session[:company_id]) 
    end 

    ... 
end 

,然後用它從你的實際行動中:

@models = my_model.where("created_at > ?", 2.weeks.ago) 

helper_method可以確保您可以使用該方法作爲觀點內的幫手。我希望這給你一個大概的想法。