Унаследовать данные от других моделей? - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть следующие модели:

class Release < ActiveRecord::Base
    has_many :products, :dependent => :destroy
    has_and_belongs_to_many :tracks
end

class Product < ActiveRecord::Base
    belongs_to :release
    has_and_belongs_to_many :tracks
end

class Track < ActiveRecord::Base
    has_and_belongs_to_many :releases
    has_and_belongs_to_many :products
end

В тот момент, когда я создаю релиз, я могу назначить ему треки.Когда я создаю продукт (в рамках выпуска), я хочу, чтобы он унаследовал назначенные ему дорожки, но при этом смог изменить порядок, добавить и удалить дорожки.

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

Полагаю, мне нужно добавить несколько строк вnew & создать действия контроллера продукта, чтобы облегчить это?Кто-нибудь может предложить какое-нибудь руководство?

В том случае, если дополнительный трек, не добавленный на уровне релиза, позже добавляется на уровне продукта, как бы я удостоверился, что он также включен на уровне релиза?Будет ли лучше использовать Jquery drag-and-drop для Release to Product?

1 Ответ

1 голос
/ 29 февраля 2012

Так что вы можете сделать что-то следующим образом:

class Product < ActiveRecord::Base
  belongs_to :release
  has_many :release_tracks, through: :release, source: :tracks      

  has_and_belongs_to_many :tracks

  before_save do
    self.track_ids = self.release_track_ids
  end
end

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...