我目前在Rails3中有一个分配表的模型,如下所示(当然还有sale和financeCompany模型):
class SaleFinanceCompany < ActiveRecord::Base
attr_accessible :sale_id, :financeCompany_id, :financedBalance
belongs_to :sale
belongs_to :financeCompany
end
我的问题很简单:我如何设置销售/财务公司模型,以便访问相关的财务余额?
例如,在我看来,我希望拥有:
<% for financeCo in sale.financeCompanies %>
<%= "£" + financeCo.financedBalance + " from "%>
<%= financeCo.name %>
<% end %>
不幸的是,这不起作用,错误是财务平衡部分。我能看到的建立我的金融公司模式的唯一方法是使用
has_many :financedBalances, :through => :saleFinanceCompanies
但这会为每次销售给我几个财务余额,但我需要一个(每个财务余额都与分配表中的销售和财务公司挂钩,所以当我应该能够做sale.financeCompany.financedBalance
时,做sale.financedBalances.where etc.
似乎没有必要)。
有什么建议吗?
Rails对待联接表的方式与您想象的有所不同。从DBA的角度来看,联接表非常好,但对于Rails来说,真正的联接表只有引用列。一旦添加了一个新列,Rails就喜欢将联接表视为一个新实体。
(就我个人而言,一开始我对此感到沮丧,但我很快就明白了这没什么大不了的)
因此,为了解决您的问题,您需要重命名您的表,比如FinanceBalances。此外,让我们将financedBalance更改为amount。
然后,在你的Sale.rb文件中,把你的关联这样放:
has_many :financeBalances
has_many :financeCompanies, :through => :financeBalances
财务公司也要这样做。
你的代码看起来像:
<% for financeBalance in sale.financeBalances %>
<%= "£" + financeBalance.amount + " from " %>
<%= financeBalance.financeCompany.name %>
<% end %>
如果您真的想让financeCompany.financedBalance
工作,可以在financeCompany模型中定义一个方法,并编写返回所需内容的查询。