2012-06-24 2 views
1

У меня есть приложение, в котором мой пользователь входит в систему, и они связаны с данной компанией. Я хочу добавить область по умолчанию ко всем моим моделям, чтобы пользователь видел данные только от своей компании. Так что в моей Location модели я попытался:Как использовать переменную сеанса в моем вызове default_scope?

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

Вместо того, засоряя их через мое приложение. Моя мысль заключается в том, чтобы сделать его безопасным, так что по умолчанию запросы Location всегда ограничены текущими пользователями company_id. Все мои другие модели каким-то образом связаны с Location, поэтому это должно быть единственное место, которое мне нужно сделать.

У меня было какое-то время, и я понял, что это плохая идея (хотя я не мог понять, как вы на самом деле это сделаете).

Могу ли я на самом деле сделать это, и если да, то как? Может быть, есть лучший способ обойти это?

+0

Ive просто пытался сделать то же самое, что логика вы тоже пришли? или вы просто не забыли включить/применить переменную сеанса ко всем запросам? Решение 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 гарантирует, что вы можете использовать метод как помощник изнутри. Надеюсь, это даст вам общую идею.

Смежные вопросы