4

ウェブサイトを論理的にアカウントに分割している場合(例:acme.mywebsite.com、xyz.mywebsite.com)、act-as-taggable-on-steroidsを実装し、現在のアカウントでタグのスコープを設定するにはどうすればよいですか?

もう少し詳しく説明すると、acmeにアクセスしている場合、xyzサブドメインのタグは表示したくありません。

act-as-taggable-onを調べましたが、同じモデルに対して異なるクラスのタグが必要な場合にのみ、コンテキストが提供されます。

4

2 に答える 2

3

私があなたの質問を理解したと仮定すると、acts_as_taggableを呼び出すアプリケーション内の任意のモデルに適用できる独自のタグのセットを持つ複数のアカウントがあります。以下はあなたが望むことをするはずです。

以下をアプリケーションコントローラーに追加して、サブドメインにすべてのアクションからアクセスできるようにすることができます。

class ApplicationController < ActionController::Base

  before_filter :getSubdomain

  def getSubdomain
      @current_subdomain.(self.request.subdomains[0])
  end
end

データベース内の何らかの方法でタグをサブドメインにリンクすると仮定すると、名前付きスコープを作成できます。この例では、サブドメインがユーザー名であり、タグ付けモデルがユーザーに属していることを前提としています。タグモデルで名前付きスコープを使用して、サブドメインに関連するスコープのみを選択できます。

class Tag < ActiveRecord::Base
  ...
  named_scope :find_by_subdomain, labmda do |subdomain|
    { :joins => "users ON users.id = tags.user_id", :conditions => ["users.name = ?", subdomain] }
  end
end

次に、サブドメインに関連付けられたユーザーによって作成された投稿のタグを取得するには、次のようにします。Posts.tags.find_by_subdomain(@subdomain)

注意:以下を追加するには、acts-as-taggable-on-steroidsによって提供されるタグモデルを拡張する必要があります。-各タグをアカウントにリンクする列。-アカウントのスコープに対する一意性の検証。複数のアカウントが同じタグを持つことを許可します。

于 2009-10-20T05:33:17.667 に答える