1

私はいくつかの簡単なショートカット クラス メソッドを記述した Rails アプリにロールモデルを持っています。しかし、これは深刻な問題を引き起こします。クリーンなデータベースを持つ別のコンピューターにそのアプリのスキーマを読み込もうとすると、失敗します。これは、db:schema:load rake タスクが最初に Rails 環境全体をロードするため、もちろんまだ存在しないデータベース内のレコードを探しているクラス メソッドをロードするためです。

だから2つの問題:

  1. ロード時にメソッドを実行する理由を理解しているかどうかはわかりません。
  2. すべてのメソッドのエラーを救出しない限り、それを回避する方法はわかりません。

私が見逃している「レール」または「ルビー」の方法はありますか?

これが私のコード例です:

Class Role < ActiveRecord::Base

  def self.admin
    find_by_name "Administrator"
  end

  def self.user
    find_by_name "User"
  end

  def self.moderator
    find_by_name "Moderator"
  end


end

Gist の同じコード: https://gist.github.com/836501

助けてくれてありがとう。

アップデート:

ファクトリからこれらのクラス メソッドへの呼び出しをブロックの横に配置するのを忘れていたことが判明しました。

したがって、この:

Factory.define :admin, :parent => :user do |f|
  f.roles [Role.admin]
end

これである必要があります:

Factory.define :admin, :parent => :user do |f|
  f.roles {[Role.admin]}
end
4

1 に答える 1

1

ここでのエラーは、単独では実行されないこれらのクラス メソッドにあるのではなく、呼び出し方に問題があります。

Role.admin、Role.user などを初期化コードまたはモデル コードで呼び出すと、これらのスコープが実行されます。

これらへの参照をコードベースで検索することをお勧めします。

さらに、エラーのスタック トレースを投稿すると (DB がまだ作成されていない場合)、誰がこれらを呼び出しているかの手がかりが得られる場合があります。

于 2011-02-21T19:23:42.240 に答える