0

基本的に単純な製品カタログである既存の Rails 3.2 アプリケーションがあります。現在、ユーザーがサイトへのアクセスに使用しているサブドメインに基づいて、特定の製品とのやり取りのみを許可する必要があるという状況に直面しています。

値としてを持つProductモデルbelongs_toa 。Repositorysubdomain

そのため、リクエストは次のとおりです。

http://bobs_store.myapp.com/products

は、 という名前のリポジトリを持つ製品のみを表示しますbobs_store

このフィルタリングを導入するのに最適な場所はどこですか? これを行うためにモデル レベルで作成できるデフォルト スコープはありますか? それに関する私の唯一の問題は、モデルからのリクエストにアクセスできないことです。これは、そのモデルに対して行うすべての呼び出しにサブドメインを渡す必要があることを意味しますか?

Productもう1つ、モデルへのすべての呼び出しは次のように行われます。

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 に答える