0

私は現在、Rails 3 の割り当てテーブルのモデルを持っています。これは次のようになります (もちろん、sale および financeCompany モデルもあります)。

class SaleFinanceCompany < ActiveRecord::Base
  attr_accessible :sale_id, :financeCompany_id, :financedBalance

  belongs_to :sale
  belongs_to :financeCompany
end

私の質問は簡単です: 関連する financedBalance にアクセスできるように、sale/financeCompany モデルを設定するにはどうすればよいですか?

たとえば、私の見解では、次のようにしたいと考えています。

<% for financeCo in sale.financeCompanies %>
    <%= "£" + financeCo.financedBalance + " from "%>
    <%= financeCo.name %>
<% end %>

残念ながら、それは機能しません。エラーは、financedBalance の部分です。金融会社のモデルを設定する唯一の方法は、

has_many :financedBalances, :through => :saleFinanceCompanies

しかし、これにより、販売ごとにいくつかのfinancedBalancesが得られますが、1つ必要です(各financedBalanceは割り当てテーブルの販売会社と金融会社の両方に関連付けられているため、実行sale.financedBalances.where etc.できる必要がある場合は不要に思えますsale.financeCompany.financedBalance)。

助言がありますか?

4

1 に答える 1

0

Rails は結合テーブルを、あなたが思っているよりも少し違った方法で扱います。DBA の観点からは、結合テーブルはまったく問題ありませんが、Rails の真の結合テーブルには参照列しかありません。新しい列を追加するとすぐに、Rails は結合テーブルを新しいエンティティとして扱います。

(個人的には、最初はこれにイライラしましたが、すぐに大したことではないことがわかりました)

したがって、問題を解決するには、テーブルの名前を変更する必要があります。たとえば、FinanceBalances としましょう。また、financedBalance を amount に変更しましょう。

次に、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 モデルでメソッドを定義し、必要なものを返すクエリを書くことができます。

于 2011-07-04T09:23:03.610 に答える