0

特定のハッシュを入力として受け取るメソッドを呼び出す必要があるモデルがいくつかあります。物事を乾いた状態に保つために、このハッシュをどこで宣言する必要がありますか?また、複数のモデルでどのように使用できますか?

ハッシュはすべての用途で同じになります。具体的には、 establish_connectionの呼び出しに渡すのは接続の詳細のハッシュです。私はまだRails3.1を使用していますが、そのメソッドはURLを使用し、そのメソッドは少し後まで利用できなかったことに気付きました。

5つのモデルで次のことを繰り返す代わりに、のようなものを呼び出したいと思い establish_connection(legacy_db_connection_hash)ます。

establish_connection(
  :adapter  => 'mysql',
  :host     => ENV['LEGACY_DATABASE_HOST'],
  :username => ENV['LEGACY_DATABASE_USERNAME'],
  :password => ENV['LEGACY_DATABASE_PASSWORD'],
  :database => ENV['LEGACY_DATABASE_NAME']
)

経由/libでやる方法はあるのではないかと思っていたのですが、どうしたらいいのかよくわかりません。

お時間をいただきありがとうございます!

4

3 に答える 3

2

application.rbファイルで構成を宣言することもできます

モジュールYourapp
  クラスApplication<Rails:: Application

    config.db_connection_config = {
     ....。
    }

  終わり
終わり

そして、それを使用するYourapp::Application.config.db_connection_config ことができます。必要に応じて、別々の環境ファイルでそれらを変更することもできます。

また、extain_connection each_timeを使用する代わりに、前の回答で提案されているように、libモジュールに別のモジュールを配置することもできます。

于 2012-06-13T19:21:26.507 に答える
1

に入る必要がありmoduleます。

たとえばFoo、ファイルでモジュールを宣言します(メソッド名の前でlib/foo.rb忘れないでください)。self.

module Foo
  # returns a hash of connection settings
  def self.settings
    {
      adapter: 'mysql2',
      database: ENV['LEGACY_DATABASE_NAME'],
      username: ENV['LEGACY_DATABASE_USERNAME'],
      password: ENV['LEGACY_DATABASE_PASSWORD'],
      host:     ENV['LEGACY_DATABASE_HOST']
    }
  end
end

Foo.settingsinclude Fooあなたがあなたのモデルにいるときに利用可能になります。

libまた、ディレクトリをconfig.autoload_pathsに追加してconfig/application.rb、それlib/foo.rbが読み取られ、含まれているFooモジュールがロードされるようにしてください。

config.autoload_paths += %W(#{config.root}/lib)
于 2012-06-13T19:17:08.347 に答える
1

これが私がそれをする方法です:

config / initializers / profile_store.rb

config = YAML.load_file('config/profile_store.yml')[Rails.env]
Rails.application.config.profile_store = config.symbolize_keys

config / profile_store.yml

development:
  host: localhost
  prefix: dev-profile

test:
  host: localhost
  prefix: test-profile

後でアクセスしRails.application.config.profile_store、開発中に取得します

{:host => 'localhost', :prefix => 'dev-profile'}
于 2012-06-13T19:40:52.897 に答える