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 方法做你想做的事。塞尔吉奥通常知道他在说什么。然而,其他响应者之一本杰明和这篇文章的答案提供了一种不同的方法,应该可行;使用范围。

所以而不是这个:

@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 回答