Виртуальные атрибуты Rails 3, используемые в другом контроллере моделей - PullRequest
2 голосов
/ 22 марта 2012

Эксперимент по решению проблемы с достижением виртуальных атрибутов модели в другом контроллере.Есть ли способ сделать это?

Вот виртуальные атрибуты:

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

1 Ответ

0 голосов
/ 24 марта 2012

Хорошо ... после копания в нем, похоже, что вы не можете делать то, что хотите, используя метод поиска, согласно этому посту .Серхио обычно знает, о чем говорит.Однако один из других респондентов, Бенджамин, и ответ на этот пост предлагают другой подход, который должен работать;используя область видимости.

Вместо этого:

@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')
...