Ruby on rails Rails子域和默认范围

Ruby on rails Rails子域和默认范围,ruby-on-rails,scope,subdomain,Ruby On Rails,Scope,Subdomain,我有一个工作应用程序。我想添加子域,将服务于相同的应用程序,但与不同的数据。我在一个Foo表中添加了一个子域字段,外键指向这个Foo表,只要我想按子域过滤数据,例如,Bar表添加了一个Foo_id ApplicationController具有设置@foo: foos = Foo.where(subdomain: request.subdomain) @foo = foos.first if foos.count > 0 我希望Bar模型有一个使用@foo的默认范围,这样我就不必更改我调

我有一个工作应用程序。我想添加子域,将服务于相同的应用程序,但与不同的数据。我在一个Foo表中添加了一个子域字段,外键指向这个Foo表,只要我想按子域过滤数据,例如,Bar表添加了一个Foo_id

ApplicationController具有设置@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的数据。但是对于子域,默认的\u作用域仍然选择空的foo\u id,即使pry让我看到@foo设置正确

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

答案见Railscast 388

使用Foo的类方法,跟踪当前的\u id,因此默认范围为:

default_scope { where(foo_id: Foo.current_id) }