Я храню свои файлы на Amazon s3. У каждого файла есть много "потребителей", и эти потребители могут быть любого типа (пользователи, внешние приложения, бизнес-списки и т. д.). Это требует отношения многие ко многим. Однако я также хочу хранить определенные атрибуты для каждого отношения. Поэтому я думаю, что лучший способ приблизиться к этому — создать отношение *has_and_belngs_to_many_through* между "s3_files" и потребителями.
Теперь вопрос в том, что, поскольку существует много типов потребителей, мне нужно использовать полиморфные ассоциации.
Итак, исходя из этого, я бы предпринял следующие шаги:
1) Create a model: "resource_relationship"
2) Have these fields in it:
t.string: consumer_type
t.string: s3_fileType
t.string: file_path
t.string: consumer_type
t.integer: s3_file.id
t.integer: consumer.id
t.integer: resource_relationship.id
3) Add to the model:
belongs_to: s3_file
belongs_to: consumer
4) add_index:[s3_file.id, consumer.id]
5) Inside: s3_file
nas_many: resource_relationships
has_many:consumers :through=> :resource_relationships
6) Inside: Users
nas_many: resource_relationships
has_many:s3_files :through=> :resource_relationships
7) Inside: business_listings
nas_many: resource_relationships
has_many:s3_files :through=> :resource_relationships
Меня смущает полиморфная часть этих отношений.
Так как у меня нет "Потребительской" модели. Я не понимаю, как это вписывается в это уравнение. Я видел несколько руководств в Интернете и придумал вышеуказанный метод и концепцию, но я не уверен, что это правильный способ решения этой проблемы.
По сути, я понимаю здесь, что «Потребители» похожи на интерфейс, который «реализуют» все модели, а затем модель S3_file может ассоциировать себя с любой моделью, которая «реализовала» этот интерфейс. Вопрос в том, как и где модели: пользователи и бизнес-списки «реализуют» этот «потребительский» интерфейс. Как мне это настроить?