2011-02-01 11 views
1

このタイトルのstackoverflowに関するもう1つの質問があります。これはそれにlinkです。私の質問は少し異なりますが、ほぼ同じ行にあります。database.ymlをオーバーライドするための戦略

私はデータベースに特権を持つ複数のユーザーを持つデータベースを扱います。したがって、データベースのログインの詳細をdatabase.ymlにハードコードすることはできません。代わりに、私はログイン資格情報を収集するHTMLフォームを作成したいと思います。私はこのlinkからerbの方法でdatabase.ymlを書くことができると理解しています。しかし、私のindex.html(自分のフォームを書いたページ)が表示されたら、接続を確立しようとする試みが行われ、ユーザー名とパスワードにnilが指定されているというエラーが表示されます。この問題にどう対処するか教えてください。

私はレールが新ですので、十分な情報を提供していないかどうか尋ねてください。事前に感謝

答えて

3

ActiveRecord::ConnectionHandling.establish_connectionデータベースに接続する関数呼び出しを使用します。必要に応じて、すべてのページでも異なるユーザーとの接続を確立するか、ユーザーモデルでデータベースの資格情報を参照する必要があります。

ActiveRecord::Baseをサブクラス化し、connectionコールをオーバーライドすることを検討してください。この呼び出しは、すべてのモデルでデータベースに接続するために使用されます。

アプリケーションから資格証明を明示的に設定する前にデータベースへの接続を完全に避けたい場合は、ActiveRecord固有のものをすべてロードせずにRailsを初期化することをお勧めします。

config.frameworks -= [ :active_record ] 

は、その後、あなたが持っている一度ActiveRecordの特定の物事のすべてをロードする必要があります。その場合は、あなたはRails::Initializer.run do |config|ブロック内で、あなたのconfig/environment.rbにこのラインを置くことによってレールの初期化からのActiveRecordを削除する必要があります資格情報

また、あなたは、実際のデータベース接続がRails::Initializer.run呼び出しの前に、あなたのenvironment.rbにでこれを置くことによって使用されているところであるRails::Initialize::initialize_databaseを上書きすることができます:あなたが使用するの4.xをレールに

module Rails 
    class Initializer 
    def initialize_database 
     nil 
    end 
    end 
end 

は前ActiveRecord::Base.establish_connectionこれは廃止予定です。

+0

返信いただきありがとうございます。あなたが提案したようにActiveRecord :: Base.establish_connectionを使ってこの問題を乗り越えることができます。私はActiveRecord :: Baseで接続呼び出しをオーバーライドしようとしています。それ以前は疑いがある。 htmlフォームからログインの詳細を収集している場合、オーバーライドはフォームコントローラで行われます。フォームがヒットする前に、現在空のdatabase.ymlを使用しようとしませんか? – shanmuk1729

+0

そのフォームにアクセスするときにモデルを使用しない場合は、問題はありません。 ActiveRecordは、インスタンスを作成しないかぎり、データベースに接続しません。 – jamuraa

+0

あなたがちょうど言ったことに抵抗することはできませんでした。私はdatabase.ymlの内容を削除し、サーバを起動しました。サーバーはこのエラーで起動しませんでした(私は質問にエラーを追加しています) – shanmuk1729

関連する問題