我有一个用户登录的应用程序,它们与给定公司相关联。我想为我的所有模型添加一个默认范围,以便用户只能看到他们公司的数据。所以在我的Location
模型中我试过了:
default_scope where(:company_id => session[:company_id])
而不是通过我的应用程序乱扔垃圾。我的想法是使其安全,以便默认情况下Location
查询始终仅限于当前用户company_id。我的所有其他模型都以某种方式与Location
相关联,因此这应该是我需要做的唯一地方。
我有些蠢蠢欲动,我认为这样做是个坏主意(尽管我看不出你会怎么做)。
我实际上可以这样做,如果是这样的话怎么样?是否有更好的解决方法?
答案 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上居住。