Метод сборки Rails has_many как полиморфный ресурс - PullRequest
0 голосов
/ 08 декабря 2011
class OrganizationModuleAttachment < ActiveRecord::Base
  belongs_to :attachable, :polymorphic => true
end

class Document < ActiveRecord::Base
  has_many :organization_module_attachments, :as => :attachable, :dependent => :destroy

  def organization_module_attachment_ids=(values)
    (values || []).each_with_index do |organization_module_id, index|
      organization_module_attachments.build(:organization_module_id => organization_module_id, :attachable_type => "Document", :position => index + 1)
    end
  end
end

form.html.haml:
= f.select :organization_module_attachment_ids, options_for_select((@organization_modules || []).collect { |a| [a.name, a.id] }, (@document.organization_modules || []).collect { |a| a.id }), {}, { :class => "multiselect", :multiple => true }

Итак, в классе документа я пытаюсь построить organization_module_attachments.Я получаю сообщение об ошибке при создании вложения модуля организации при отправке формы.Я думаю, что rails предполагает, что внешний ключ вложения: document_id, хотя на самом деле он полиморфен и поэтому: attachable_id.Если я явно установлю: attachable_id в методе сборки, он будет работать нормально.

Я перепробовал несколько вещей и искал несколько дней без удачи.Кто-нибудь знает, как это сделать?

...