Имя класса направляющих / тип, не работающий на полиморфный has_many: через

У меня есть система выставления счета, которая управляет дебетами и кредитами. В основном сумма счета получена суммой ее дебетов, и баланс получен путем взятия суммы ее кредитов и вычитания ее против общей суммы.

Я делаю это с четырьмя моделями.

  1. Счет
  2. Позиция
  3. Дебет
  4. Кредит

Путем это работает, с помощью модели соединения (Позиция), которая имеет полиморфную ассоциацию, названную записываемой. Все, кажется, работает правильно на первый взгляд. Однако осмотр позиции показывает, что, в то время как recordable_id обнаруживается хорошо, recordable_type является нолем.

Вот повреждение вниз кода:

class Invoice < ActiveRecord::Base
  has_many :line_items, :dependent => :destroy
  has_many :debits, :through => :line_items, :as => :recordable
  has_many :credits, :through => :line_items, :as => :recordable
end

class LineItem < ActiveRecord::Base
  belongs_to :invoice
  belongs_to :recordable, :polymorphic => true
  belongs_to :credit, :class_name => "Credit", :foreign_key => "recordable_id"
  belongs_to :debit,  :class_name => "Debit",   :foreign_key => "recordable_id"
end

class Credit < ActiveRecord::Base
  has_many :line_items, :as => :recordable, :dependent => :destroy
end

class Debit < ActiveRecord::Base
  has_many :line_items, :as => :recordable, :dependent => :destroy
end

Кто-либо может указать на меня в правильное направление здесь?

5
задан John Topley 23 January 2010 в 15:22
поделиться

2 ответа

Вы объявляете неоднозначные ассоциации в своем классе LineItem .

Вкратце, own_to делает это в вашем классе:

  1. own_to: invoice создает метод invoice , который выполняет поиск в таблице invoices . для записи, на которую ссылается invoice_id
  2. own_to: recordable,: polymorphic => true создает метод recordable , который ищет в таблице recordable_type.underscore.pluralize запись, на которую ссылается recordable_id
  3. own_to: credit,: class_name => "Credit",: foreign_key => "recordable_id" , создает метод credit , который выполняет поиск по таблица кредитов для записи, на которую ссылается recordable_id . Обратите внимание, что recordable_type здесь игнорируется.
  4. То же самое относится к own_to: debit соответственно.

Поскольку ваш LineItem может принадлежать только к аккредитиву или к дебету, нет смысла объявлять эти ассоциации дополнительно. Вы можете обратиться к ним через записываемую ассоциацию .

3
ответ дан 15 December 2019 в 06:26
поделиться

SCOICE.LAST.CREDITS << CURDE.NEW

Это правильный способ присвоения ассоциаций, на которые я ошеломлен относительно того, почему Recordbable_Type не поднимается.

сжимается на соломею здесь, но вы пробовали:

Invoice.last.credits << Credit.create(:value => 1, :date => Time.now, ...)

У меня лично были проблемы при использовании многоуровневых таблиц соединения многозначного соединения в рельсах, которые часто были разрешены с помощью HAS_MANY_POLYMORPHS плагин.

Извините, что это не напрямую отвечает на ваш вопрос.

0
ответ дан 15 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: