Таблица назначения Rails с третьим столбцом - PullRequest
0 голосов
/ 29 июня 2011

У меня в настоящее время есть модель для таблицы назначений в Rails 3, которая выглядит следующим образом (конечно, есть и модели sale и financeCompany):

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

  belongs_to :sale
  belongs_to :financeCompany
end

Мой вопрос прост: как можноЯ настроил модели sale / financeCompany так, чтобы я мог получить доступ к связанному financedBalance?

Например, на мой взгляд, я хотел бы иметь:

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

Это, к сожалению, не работает,с ошибкой, являющейся частью financedBalance.Единственный способ настроить модель моей финансовой компании - это использовать

has_many :financedBalances, :through => :saleFinanceCompanies

, но это даст мне несколько финансируемых балансов для каждой продажи, но мне нужен один (каждый финансируемый баланс связан с продажейи финансовую компанию в таблице назначения, поэтому выполнение sale.financedBalances.where etc. может показаться ненужным, когда я смогу выполнить sale.financeCompany.financedBalance).

Есть предложения?

1 Ответ

0 голосов
/ 04 июля 2011

Rails обрабатывает таблицы соединений немного иначе, чем вы думаете. С точки зрения администратора баз данных, ваша таблица соединений отлично, но для 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 и написать запрос, который возвращает то, что вы хотите.

...