2011-08-10 15 views
0

私のプロジェクトにtable_name_prefixを使用する際に問題が発生しました。私のプロジェクトには、他のアプリケーションをプラグインとして持つ主なアプリケーションがあります。これらのプラグインは、メインアプリケーションのサブシステムのように機能します。私はのActiveRecordプラグインのtable_name_prefixを使用したいサブシステムのデータベースにテーブルを整理するRails 3 Plugin - アクティブレコードtable_name_prefix

私は、コマンドプラグインの init.rb に置く場合はconfig.active_record.table_name_prefix =「per_」 ActiveRecordのは「per_users」だけの事、私のために見つけようとしますので、メインアプリケーションが動作しません私の主なアプリケーションのプラグインだけが接頭辞 "per_"を使用していることが必要です。

上記のコマンドでプラグインでrailsフォルダを作成しようとしましたが、同じ問題が発生し、すべてのアプリケーションが接頭辞付きのテーブル名を探します。プラグインをレールと私はメインアプリケーションでサブシステムを入れたときにモデルを変更したくないとImは、サブシステムを開発しているため

代替は、プラグインのモデルにset_table_nameを使用しているが、私にとってはその良いではありません。

誰かが私を助けることができますか?独自の接頭辞を持つ各プラグインを持っている

+0

使用しているレールのバージョンは? – Rob

答えて

2

は、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のドキュメントの詳細here

0

this questionを見てみましょう。私は同じ問題に遭遇しました。私のアプリケーションの名前(メインモジュール)は私のモデルの名前空間と同じ名前でした。

関連する問題