Мне интересно, как я могу справиться со следующей ситуацией:
Page
has_many Assets
Stylesheet
has_many Assets
Javascript
has_manyAssets
Теперь я хочу иметь возможность выполнять следующие запросы:
Page.first.assets
# показывает все ресурсы (таблицы стилей и JavaScript) для этой страницы
Page.first.assets.javascripts
# показывает все ресурсы javascript для этой страницы (то же самое для таблиц стилей)
Javascript.first.pages
# показывает все страницы, которые включают этот javascript (то же самое для таблиц стилей)
У меня сейчас есть такая настройка:
Assets:
stylesheet_id
javascript_id
page_id
belongs_to :stylesheet
belongs_to :javascript
belongs_to :page
scope :stylesheets, where{ stylesheet_id != nil } ###
scope :javascripts, where{ javascript_id != nil } # uses "squeel" gem
Pages:
has_many :assets
has_many :stylesheets, through: :assets
has_many :javascripts, through: :assets
Stylesheets/Javascripts:
content (text field)
has_many :assets
has_many :pages, through: :assets
Проблема в том, что это не работает
Однако, мне кажется, что это не правильный путь, потому что у меня три *_id
поля в модели Assets
.javascript_id
, stylesheet_id
и page_id
.В каждой строке javascript_id
или stylesheet_id
будут пустыми в этой ситуации, что для меня похоже на запах кода.
Есть предложения, как справиться с этой ситуацией?