2012-03-21 6 views
2

別のコントローラでモデルの仮想アトリビュートを達成しようとすると、問題が試行されます。 これを行う方法はありますか?他のモデルコントローラで使用されている3つの仮想アトリビュート

def montant 
    self.facture_details.sum(:montant_detail) 
end 

def paiements 
    self.facture_paiements.sum(:montant) 
end 

def facture_statut 
    if self.paiements < self.montant 
    then 
    "Ouverte" 
    else 
    "Payée" 
    end 
end 

、別のコントローラに私がやろうとしている:

SQLite3::SQLException: no such column: factures.facture_statut: SELECT "factures".* FROM "factures" WHERE "factures"."facture_statut" = 'Ouverte' 
:私はこれを行うと

@factures = Facture.find(:all, :conditions => {:facture_statut => 'Ouverte'}) 

が、私はエラーを得た。ここ

は仮想属性であります

これを手伝ってくれる人がいますか?

ありがとう

更新;ここにフルモデルです:

class Facture < ActiveRecord::Base 
    has_many :facture_details, :dependent => :destroy 
    has_many :facture_paiements 
    accepts_nested_attributes_for :facture_details, :allow_destroy => true 
    accepts_nested_attributes_for :facture_paiements 
    attr_accessor :facture_statut 
    attr_accessor :montant 
    attr_accessor :paiements 
    def montant 
    self.facture_details.sum(:montant_detail) 
    end 
    def paiements 
    self.facture_paiements.sum(:montant) 
    end 
    def facture_statut 
    if self.paiements < self.montant 
     then 
     "Ouverte" 
    else 
     "Payée" 
    end 
    end 
end 
+0

モデルに 'facture_statut'が' attr_accessible'として宣言されていますか?例えば'attr_accessible:facture_statut? – ScottJShea

+0

Yeap。しかし、作業していません... – Dannoel

+0

まだ取得しています:SQLite3 :: SQLException:いいえそのような列:factures.facture_statut:SELECT "factures"。* FROM "factures" WHERE "factures" "facture_statut" = 'Ouverte' – Dannoel

答えて

0

わかりました...あなたはfindメソッドを使用してやりたいことができないようにそれを掘り下げるた後、それはthis postによると、見えます。セルジオは、彼が何を話しているかを知っている。しかし、他のレスポンダーの1人であるBenjaminと答えはon this postですが、これはうまくいくはずです。スコープを使用します。

そうではなく、この:

@factures = Facture.find(:all, :conditions => {:facture_statut => 'Ouverte'}) 

あなたがモデルにスコープを追加して、スコープを呼び出す必要があります:

class Facture < ActiveRecord::Base 
    scope :facture_statut lambda {|facture_statut| {:facture_statut => facture_statut}} 
    #rest of class 
end 

そして、このようにそれを呼び出す:

Fracture.facture_statut('Ouverte') 
+0

ありがとうScott。非常に有望で、エラーが発生するようなソリューションを試しました。 不明なキー:facture_statut 問題について考えてみましょうか? – Dannoel

関連する問題