Rails子域和default_scope

时间:2015-02-06 10:32:00

标签: ruby-on-rails scope subdomain

我有一个有用的应用程序。我想添加将提供相同应用但具有不同数据的子域。我在一个Foo表中添加了一个子域字段,并且指向此Foo表的外键在哪里我希望通过子域过滤数据,例如Bar表添加了foo_id。

ApplicationController有一个设置@foo的before_fil:

foos = Foo.where(subdomain: request.subdomain)
@foo = foos.first if foos.count > 0

我希望Bar模型使用@foo具有默认范围,这样我就不必更改我要求Bar的所有位置。

default_scope { where(foo: @foo) }

这适用于no-subdomain url,其中@foo为nil且app仅显示foo_id为NULL的数据。但它不适用于子域名,default_scope仍会选择NULL foo_id,即使pry让我看到@foo设置正确。

那么在模型范围内使用AppController中的实例变量是不可能的吗?

1 个答案:

答案 0 :(得分:0)

在Railscast中回答#388 http://railscasts.com/episodes/388-multitenancy-with-scopes

使用Foo的类方法,跟踪current_id,因此默认范围变为:

default_scope { where(foo_id: Foo.current_id) }