1

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

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

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

我四处闲逛,我觉得这样做是个坏主意(尽管我看不出你会怎么做)。

我实际上可以这样做吗?如果可以,怎么做?有没有更好的方法来解决这个问题?

4

2 回答 2

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确保您可以在视图中将该方法用作帮助程序。我希望这能给你一个大致的想法。

于 2012-06-25T13:08:16.000 回答
0

清除旧问题 - 对于租赁,最好的选择是公寓或acts_as_tenant。我最近最终解决了 activerecord-multi-tenant 问题,因为 Apartment 似乎有越来越多的缩放问题。

于 2020-01-19T23:46:33.510 回答