在另一个模型控制器中使用的 Rails 3 虚拟属性
Posted
技术标签:
【中文标题】在另一个模型控制器中使用的 Rails 3 虚拟属性【英文标题】:Rails 3 virtual attributes used in another Models controller 【发布时间】:2012-03-21 20:47:21 【问题描述】:尝试在另一个控制器中实现模型的虚拟属性的问题。 有办法吗?
这里是虚拟属性:
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
【问题讨论】:
你有facture_statut
在模型中声明为attr_accessible
;例如`attr_accessible :facture_statut?
仍然得到:SQLite3::SQLException:没有这样的列:factures.facture_statut: SELECT "factures".* FROM "factures" WHERE "factures"."facture_statut" = 'Ouverte'
你能发布你的整个模型吗?
在这里。感谢您的帮助
【参考方案1】:
好的...根据this post,在深入研究之后,您似乎无法使用 find 方法做您想做的事情。塞尔吉奥通常知道他在说什么。然而,其他响应者之一本杰明和答案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')
【讨论】:
谢谢斯科特。我已经尝试过您的解决方案,听起来很有希望并得到一个错误:Unknown key(s): facture_statut 关于这个问题有什么想法吗?以上是关于在另一个模型控制器中使用的 Rails 3 虚拟属性的主要内容,如果未能解决你的问题,请参考以下文章
Rails:2单击一个提交按钮在两个数据库中插入记录(将一个控制器的记录保存在另一个控制器中)
Rails 3 - 在另一个帖子的SHOW视图中无法创建新帖子