Я использовал dependent: :destroy
на моделях, прежде чем с какой-либо проблемой, но в рельсах 4.2. Я застрял. Использование прошлого использовалось в основном для классических моделей has_many belongs_to. Кажется, что #<ActiveRecord::Associations::CollectionProxy
вызывает мои проблемы.Rails 4.2 зависит:: уничтожить проблемы с CollectionProxy
class Subject < ActiveRecord::Base
has_many :properties
has_many :values, :through => :properties
has_many :tags, :through => :properties
class Property < ActiveRecord::Base
belongs_to :subject
belongs_to :tag
belongs_to :value
class Value < ActiveRecord::Base
has_one :property
has_one :subject, :through => :property
has_one :tag, :through => :property
class Tag < ActiveRecord::Base
has_many :properties
has_many :subjects, :through => :properties
Мои цели были
- Удаление Subject будет удалить все связанные с ним свойства и значения
- Удаление свойства удалит соответствующее значение, оставляя Subject нетронутыми
- или, При удалении значения удаляется связанное с ним свойство, оставляя объект неповрежденным
Я попытался добавить зависимое уничтожение в строке значений в Subject и в строке свойств в Value. Он удалит свойства, но не значения. Я попытался поместить его в строку свойств и строку значений свойств в Property и получил те же результаты - он не удалит значения.
Затем я попытался установить фильтр before_destroy
и столкнулся с тем же типом проблемы или ActiveRecord::InvalidForeignKey: PG::ForeignKeyViolation: ERROR
, когда попробовал ассоциации моделей. Затем я взломал его и получил его на работу:
# In Subject model
before_destroy :destroy_values
def destroy_values
# relations does not seem to work got the Values using a new query
#values.destroy_all
pids = values.pluck(:id)
Value.where(id:pids).destroy_all
end
# in Value model
before_destroy :destroy_property
def destroy_property
property.destroy
end
Не уверен, что происходит, читайте столько, сколько я мог на dependent
и попытался delete_all, и каждая вещь, которую я видел, не радость!
Да, это странная модель, просто играющая вокруг и пытающаяся воспроизвести «Что?» База данных Apple II в рельсах для усмешек.