0

config/initializers/の下に、データベースからデフォルトの" car " インスタンスの ID をロードする1 つの ruby​​ ファイルがあります。したがって、アプリケーションの起動後、アプリケーションはこのデフォルトの車の ID を直接使用できます。

しかし、最初にこのデフォルトの車をデータベースに挿入する必要があるため、デフォルトの車をデータベースの Cars テーブルに保存するには、レーキ(シード) タスクまたはデータベースの移行が必要です。

紛争がやってくる!rake タスクまたはマイグレーションを実行してインスタンスをデータベースに挿入すると、初期化ファイルは常に実行前に最初に実行されます。つまり、「 config/initializers/ 」の下の ruby​​ ファイルはデフォルトの車のnil id を取得します。まだデータベースに保存されていません。

では、この対立を解消するにはどうすればよいでしょうか。(その初期化ファイルを持つ目的は、デフォルトの車の ID を一度だけロードすることです) デフォルトの車の ID を一度だけロードする他の方法はありますか?

- - - - - - -編集 - - - - -

初期化子の下のコード:

default_car=Car.where({:name => DEFAULT_CAR_NAME})
def default_car_id
  return {:default_car_id=>default_car.id}
end
4

1 に答える 1

0

私はそのようにはしません-それはかなり厄介なようです。単一のデータベースクエリはそれほど高価ではないので、あなたの車のモデルで次のようなことをします。

class Car < ActiveRecord::Base

  def self.default_car
    @default_car ||= Car.where(:name => DEFAULT_CAR_NAME)
    @default_car
  end

end

DEFAULT_CAR_NAMEを変更する場合は、yaml構成ファイルに入れることをお勧めします。それ以外の場合は、ハードコーディングします。

于 2011-03-31T14:28:12.513 に答える