我有一个属于客户的发票模型(当然还有客户发货的发票)。
如果我这样做:
{
@invs = Invoice.find(
:all,
:include => ["customer"],
:conditions => ['somecondition']
)
}
@invs类是一个数组,我可以看到数组中第6张发票的所有属性:@invs[5]
。但是,此时我没有看到关联的客户记录属性。为此,我需要@invs[5].customer
。
我的问题是什么是允许从发票记录访问客户记录的Ruby结构?我想创建一个新的SomeClass任意记录,并将其附加到记录集中的发票记录,以便我可以@inv[5].someclass
。那可能吗?如果是这样的话?
[编辑 - 全文] 以下试图解释我为什么问这个问题。
虽然我的发票模型与Db中的单个表有关,但我的客户记录可以归档并移动到另一个名为Archcustomer的表中,该表与结构中的Customer相同。所以我还有其他的关联,例如Invoice belongs_to Archcustomer和Archcustomer has_many Invoices。
我需要获取发票清单及其相关客户记录(无论其位于何处,即客户或Archcustomer),但按Customer.category_id和Customer.id以及Invoice.id排序。
在我上面的@invs的原始示例中,我包括客户记录,我可以包括:order => 'customer.category_id,customer.id,invoice.id'子句但客户归档的地方客户记录为零。
所以我想我会做以下事情:
{
@invs.each do |inv|
next if inv.customer != nil
archcust = Archcustomer.find(inv.customer_id) #since it's not in customer get it from Archcustomer
inv.customer.category_id = archcust.category_id
etc...
...
end
}
然后使用@ inv.sort_by。然而,这是抱怨,因为我正在尝试为Nil类的customer.category_id分配一个值。
那时我想如果我可以将任意记录附加到Invoice,我可以从Archcustomer或Customer填写信息,并有一组共同的属性来调用我的sort_by。
当然,如果有其他方式可以按照我的要求订购我的发票组,那么我会很乐意接受它。
答案 0 :(得分:2)
在您的发票模型中(假设您已建立Archcustomer关系):
class Invoice < ActiveRecord::Base
def customer_record
customer or archcustomer
end
end
当您需要从任何可用来源获取记录时,请使用@invoice.customer_record
代替@invoice.customer
或@invoice.archcustomer
。当你加载时.include
。
当您已经拥有真实的Customer
时,不要费心将内容分配给虚构的Archcustomer
。只需在sort_by
上运行customer_record.category_id
。