我的应用程序基于子域。每个经理都有自己的子域,应该只显示他的拍卖。我有:
class Lot < ActiveRecord::Base
belongs_to :auction
end
class Auction < ActiveRecord::Base
has_many :lots
belongs_to :manager
end
class manager < ActiveRecord::Base
has_many :auctions
end
如果应用程序是使用子域访问的,我有一个 before_filter 执行以下操作:
def load_manager
@loaded_manager = Manager.find_by_subdomain(request.subdomain)
end
在我的 Lot 的 default_scope 上,我想做以下事情:
default_scope { @loaded_manager.present? ? where(deleted: false).joins(:auction => :manager).where("auctions.manager_id = ?", @loaded_manager.id) : where(deleted: false) }
这样,无论我在网站上的哪个位置,我都会显示属于经理拍卖的拍品。
问题是我无法访问模型上的@loaded_manager。这样做的最佳方法是什么?
http://railscasts.com/episodes/388-multitenancy-with-scopes?view=comments解决了这个问题!