如何在default_scope调用中使用会话变量?

时间:2012-06-24 22:51:56

标签: ruby-on-rails-3

我有一个用户登录的应用程序,它们与给定公司相关联。我想为我的所有模型添加一个默认范围,以便用户只能看到他们公司的数据。所以在我的Location模型中我试过了:

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

而不是通过我的应用程序乱扔垃圾。我的想法是使其安全,以便默认情况下Location查询始终仅限于当前用户company_id。我的所有其他模型都以某种方式与Location相关联,因此这应该是我需要做的唯一地方。

我有些蠢蠢欲动,我认为这样做是个坏主意(尽管我看不出你会怎么做)。

我实际上可以这样做,如果是这样的话怎么样?是否有更好的解决方法?

2 个答案:

答案 0 :(得分: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确保您可以在视图中将该方法用作帮助程序。我希望这能给你一般的想法。

答案 1 :(得分:0)

清除旧问题-对于租赁,最好的选择是Apartment或acts_as_tenant。由于Apartment似乎在扩展方面遇到了越来越多的问题,最近我最终决定在activerecord-multi-tenant上居住。