0

我有一个现有的 Rails 3.2 应用程序,它基本上是一个简单的产品目录。现在我面临的情况是,我只需要允许基于用户用于访问站点的子域与特定产品进行交互。

Product模型belongs_toa ,Repository具有subdomainas 值。

因此请求:

http://bobs_store.myapp.com/products

仅显示具有名称的存储库的产品bobs_store

在哪里/是引入此过滤的最佳地点/地点?我可以在模型级别创建某种默认范围来执行此操作吗?我唯一的问题是我无法访问模型的请求,这是否意味着我必须将子域传递给我对该模型的每次调用?

另一件事是,对Product模型的所有调用都是这样进行的:

current_user.products.<whatever>

是否可以以某种方式修改我的current_user辅助方法以获得我想要的功能?除此之外,我可以用路线做些什么吗?这些是在黑暗中拍摄的,但我希望有一些我不知道的 Rails 快捷方式可以使用。

4

2 回答 2

1

我之前看到的方法是在模型上有一个范围,例如Product.repository_scope.

class Product < ActiveRecord::Base
  def self.repository_scope(repository)
    where(repository: repository)
  end
end

我不确定不必每次都传入当前存储库的好方法。

于 2013-10-18T16:35:30.453 回答
1

正如 luri G 提到的,请观看此 Railscast: 221-Subdomains

创建范围以查询存储库的产品

class Product < ActiveRecord::Base
   belongs_to :repository

   scope :for_repository,
         (lambda do |repository_name|
            includes(:repository).
            merge(Repository.where(name: repository_name))
         end)
end

根据 Railscasts 实现子域路由处理逻辑后,在控制器中,您将调用产品用于存储库,如下所示:

current_user.products.for_repository(request.subdomain)
于 2013-10-19T02:41:53.440 回答