0

私のプロジェクトでtable_name_prefixを使用するのに問題があります。私のプロジェクトには、他のアプリケーションをプラグインとして持つメイン アプリケーションがあります。これらのプラグインは、メイン アプリケーションのサブシステムのように機能します。

サブシステムのデータベースでテーブルを整理するには、ActiveRecordプラグインのtable_name_prefixを使用したいと考えています。

プラグインのinit.rbにコマンドconfig.active_record.table_name_prefix = "per_"を配置すると、ActiveRecord が "per_users" を見つけようとするため、メイン アプリケーションは機能しませんが、私が望む唯一のことは、私のプラグインのみです。メイン アプリケーションでは、プレフィックス「per_」を使用します。

上記のコマンドを使用してプラグインに rails フォルダーを作成しようとしましたが、同じ問題が発生し、すべてのアプリケーションがプレフィックス付きのテーブル名を見つけようとします。

別の方法は、プラグインのモデルでset_table_nameを使用することですが、サブシステムを Rails プラグインとして開発していて、サブシステムをメイン アプリケーションに配置するときにモデルを変更したくないため、私には適していません。

誰かが私を助けることができますか?

4

2 に答える 2

3

各プラグインに独自のプレフィックスを付けるには、Rails 3 の場合、名前空間のプラグイン内でモデルを整理してみてください。

class Foo::Bar < ActiveRecord::Base
 ...
end

module Foo
  def self.table_name_prefix
    'foo_'
  end
end

これは、メイン アプリケーション内で何も変更せずに、プラグイン内で機能します。他のアプローチは、いくつかのメイン モデルを使用し、それを他のモデルから継承することです。

class Foo < ActiveRecord::Base
  def self.table_name_prefix
    'foo_'
  end
end

class Bar < Foo
 ...
end

このアプローチは、すべてのモデルを追加機能で拡張するために使用されることがあります。

Railsドキュメントの詳細については、こちら

于 2012-01-04T00:37:18.533 に答える