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