2012-03-05 18 views
1

モデル内のさまざまな値を単純なTRUEまたはFALSEにするために、多数の計算を扱っています。問題は、これらの計算は非常に激しく、私は長いSQL文に従うのは難しいを作成したいものではありません。レコードを返すときにモデルがチェックできるメソッド内で、計算全体を取得するだけです。Rails 3、モデルメソッド/計算された属性

これを達成するためのさまざまな方法を試しましたが、他の同様の賞を見ると、他の人が私のようなnewbsをSQLにプッシュします。これはほとんどの目的に役立ちますが、実行される計算がモデル外。

モデル:

class Quality < ActiveRecord::Base 
... 
def passed_inspection 
    [code that calculates based on values in model] 
end 

コントローラー:

@records = Quality.where('passed_inspection = true') 

ビュー:

Did pass inspection?: <%= record.passed_inspection %> 
+0

あなたがしようとしている計算の例を投稿することができますか? – ScottJShea

+0

何が問題になっていますか?長いSQL文を使用したくない場合は、モデルのメソッドをコードしてください。モデルのクラスに計算コードを入れたくない場合は、モデルを入力としてTRUEまたはFALSEを戻すコントローラー・ヘルパー・メソッドを作成します。 –

+0

@MatteoMelani私はすでにビューヘルパーとして表されている計算を持っていますが、合格/不合格に基づいてレコードを取得する必要もあります。たとえば、失敗したレコードのみを表に出力するビューがあります。 – Nick

答えて

7

あなたの問題を解決するには、範囲を用いることであろうようですねクラスメソッド〜h elpあなたのモデルをクリーンアップします。基本的にこのようなあなたのモデルを設定します:

class Quality < ActiveRecord::Base 
    def self.passed_inspection 
     # Code that does your calculations 
    end 

    scope :passed, passed_inspection() # This needs to be below the function above 
end 

はその後あなたがこの

@records = Quality.passed 

のようにそれを呼び出すことによって、このデータを得ることができるあなたが任意のより多くの情報が必要な場合に、この問題についてのキャストレールがあります: RailsCast #215 Advanced Queries

編集:固定いくつかのひどい文法

+0

もしあなたがまだあなたにアップアップすることができたら、私はそうするだろう!どうもありがとう。これは基本的に私が必要なものです。 – Nick

関連する問題