Rails 个子域和 default_scope

Rails subdomains and default_scope

我有一个可用的应用程序。我想添加将服务于相同应用程序但具有不同数据的子域。我在一个 Foo table 中添加了一个子域字段,并且外键指向这个 Foo table 我希望通过子域过滤数据的任何地方,例如 Bar table 有一个 foo_id 添加。

ApplicationController 有一个 before_filter 设置 @foo:

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

我希望 Bar 模型具有使用 @foo 的默认作用域,这样我就不必更改调用 Bar 的所有位置。

default_scope { where(foo: @foo) }

这非常适用于无子域 url,其中 @foo 为 nil,应用仅显示 foo_id 为 NULL 的数据。但它不适用于子域,default_scope 仍然选择 NULL foo_id,即使 pry 让我看到 @foo 设置正确。

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

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

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

default_scope { where(foo_id: Foo.current_id) }