2011-02-05 6 views
0

私は以下のコードを使用してアクティブレコードを拡張し、オーダークラスを少しきれいにします。しかし、それは動作していません。一方、私は抽象基底クラスOrderBaseを作成する場合ActiveRecord :: Base Extensionが動作しません

environment.rbには
class ActiveRecord::Base 
    def self.has_statuses(*status_names) 
    validates :status, 
       :presence => true, 
       :inclusion => { :in => status_names} 

    status_names.each do |status_name| 
     scope "all_#{status_name}", where(:status => status_name) 
    end 

    status_names.each do |status_name| 
     define_method "#{status_name}?" do 
     status == status_name 
     end 
    end 
    end 
end 

私は

require "#{Rails.root}/lib/active_record_extensions.rb" 

と上記の拡張を必要とする代わりに、それは予想通り動作していることからの私のためのクラスを継承してみましょう。私の猿のパッチを「取る」ためには何をする必要がありますか?

EDIT:忘れてしまったことは、has_statusesのメソッドが欠落しているというメッセージが表示されます。

EDIT2:上記のコードは(レールc)のコンソールで動作しますが、それはテストで

EDIT3動作しません:私は偽= config.cache_classesに環境/ test.rbを変更し、それがいるようだをトリックを行う。明らかに多くを学ぶ:)

+0

に必要追加しましたか? – seeingidog

+0

私はOrderクラスでそれを使用しようとしています:has_statuses:created、:in_progress、:クラスをきれいに保つために出荷されました。 – mhenrixon

+0

@ tourismidog err今、私のために働いていて、何が違うか分かりません。私は明らかに何かをしましたが、何がわからないのですか。それがうまくいくはずだと答えを投稿すると、それを答えとしてマークします! – mhenrixon

答えて

0

私はこれは実際にこの方法を使用しているか、私の作品私のためのクラスのトップ

require "#{Rails.root}/lib/active_record_extensions.rb" 
class Order < ActiveRecord::Base 
0

どこにその拡張コードを保存しますか?私は、重要なRailsクラスの拡張が "config/initializers /"ディレクトリ(ここでは整理しておくことを好みます)から動作しないことを発見しましたが、拡張コードを"config/environment.rb"の終わりです(私はまったく好きではありません。なぜ私は決して考えなかった。

あなたがRailsの3にしているならば、これはもはや適用されないかもしれないので、私は、Railsの2.3.8によ...

EDIT

が、私はそれが取った他のトリックを忘れてしまいましたActiveRecord::Baseの拡張機能を入手してください - メソッド(クラスメソッド、少なくとも私はインスタンスメソッドでそれを行っていません)は、メタクラスで宣言する必要があります(私はそれが...と呼ばれると思います)。ここに私の作業ActiveRecord::Base拡張機能です:

ActiveRecord::Base.class_eval do 
    class << self 
     def find_with_benchmark(*args) 
      bg = Time.now 
      ret = find_without_benchmark(*args) 
      MyLogger.ar_time += Time.now - bg 
      MyLogger.ar_count += 1 
      return ret 
     end 

     alias_method_chain :find, :benchmark 
    end 
end 
+0

ありがとう、私はまた、environment.rbの最後にコードを含めようとしましたが、同じ結果を得ました。メソッドがありません:( – mhenrixon

+0

@mrixrixon Oho!待って!私の 'ActiveRecord :: Base'拡張機能を稼働させるために何かしなければならなかったことを忘れてしまった!私は答えに1分間触れます... –

+0

あなたの方法これを実行すると、予想外の\ nが予想されてしまうという問題が発生します。 – mhenrixon

関連する問題