2

別のコントローラーでモデルの仮想属性を達成しようとする問題を実験しています。それを行う方法はありますか?

仮想属性は次のとおりです。

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

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

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

これを行うと、エラーが発生しました:

SQLite3::SQLException: no such column: factures.facture_statut: SELECT "factures".* FROM "factures" WHERE "factures"."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
4

1 に答える 1

0

わかりました...それを掘り下げた後、この投稿によると、findメソッドを使用してやりたいことができないようです。セルジオは通常、彼が話していることを知っています。ただし、他のレスポンダーの 1 人である Benjaminとこの投稿の回答は、機能するはずの別のアプローチを提供しています。スコープを使用。

これではなく:

@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')
于 2012-03-24T02:42:37.113 に答える