2011-01-12 2 views
0

У меня есть сценарий, где мне нужно сложное полиморфное отношение и нужна помощь в нем.Сложная полиморфная связь

У меня есть аа модель «документ», который может быть присоединен к любой модели, как «Сотрудник», «Пользователь» и т.д.

Я занимаюсь разработкой плагин для крепления различных документов

class Employee < ActiveRecord::Base 
    attach_documents_as :general_documents 
    attach_documents_as :meeting_documents 
end 

До этого момента я преуспел. Но для того, чтобы получить больше, мне нужно назначить какой-то тип документу, так как я хочу указать название модели типа документа с такой основной моделью.

class Employee < ActiveRecord::Base 
    attach_documents_as :general_documents, :general_doc_types 
    attach_documents_as :meeting_documents, :meeting_doc_types 
    attach_documents_as :job_record, :misc_doc_types 
end 

Здесь

:general_doc_types , :meeting_doc_types, :misc_doc_types 

все названия моделей.

У меня есть модель документа, как этот

class Document < ActiveRecord::Base 
     attr_accessible :title, :description, :attachment 
     belongs_to :attachable, :polymorphic => true 
     has_attached_file :attachment 
end 

Может ли одна иметь представление, что, как я могу я сделать отношения документа к различным моделям типов. Будем искать ваши отзывы.

+0

Так будут ли генерироваться ваши модели general_doc_types и т. Д. Вашим генератором или пользователем? Если это первый случай, считаете ли вы, что вы сделали какую-то магию, чтобы фактическое отношение стало простым 'has_many' и' own_to'? – PeterWong

ответ

0

Похоже, вы создаете полиморфное отношение, используя однонаправленное наследование. Я искал это немного и не придумывал слишком много решений, что заставляет меня задаться вопросом, есть ли лучший подход. Я не делал этого раньше, поэтому я не могу сказать точно. Один из примеров, который я нашел, выглядит так, что его довольно просто настроить. http://www.mendable.com/2010/03/30/polymorphic-single-table-inheritance-sti.html

+0

Я проверил пример, но это не соответствует моему сценарию. Еще одно, что я не использую однонаправленное наследование. Документ имеет отдельную таблицу, и каждая тип типа документа: general_doc_types,: meeting_doc_types,: misc_doc_types, все имеют отдельные таблицы. –

Смежные вопросы