2016-08-14 2 views
1

Я использую драгоценность Paranoia и теперь борюсь с проблемой. Мне нужно присоединить has_many удаленные элементы, но они возвращаются, но не удаляются. Мои модели:Paranoia Gem - присоединяется к удаленным элементам

class Mailing < ActiveRecord::Base 

    acts_as_paranoid 

    has_many :mailing_fields 
    has_many :fields, through: :mailing_fields 

end 

class MailingField < ActiveRecord:: 

    belongs_to :mailing 
    belongs_to :field 

end 

class Field < ActiveRecord::Base 

    has_many :mailing_fields, dependent: :destroy 
    has_many :mailings, through: :mailing_fields 

end 

Query Я бегу, который должен возвращать mailings с удаленными элементами:

Field.joins(:mailings).where('mailings.id = ?', mailing_id) 

ответ

1

Paranoid gem имеет встроенный объем для доступа к удаленным элементам: with_deleted.

Mailing.with_deleted.joins(:fields).where(id: mailing_id) 
1

paranoid камень устанавливает рамки по умолчанию только в том числе не-удаленные элементы в запросах. Обходной путь будет:

Field.joins(:mailings).where('mailings.id = ? mailings.deleted_at != ?', mailing_id, nil) 
1

Вы можете удалить сферу в запросе, как например:

Field.joins(:mailings).where("mailings.deleted_at != :deleted_status OR mailings.deleted_at = :deleted_status", deleted_status: nil).where(mailings: { id: mailing_id }) 

ИЛИ, так как вы пытаетесь принести Field, который, кажется, многие ко многим отношений, Я предпочитаю инвертировать запрос как таковой:

Mailing.unscoped.joins(:fields).find(mailing_id).fields 

Сообщите мне, если я был в состоянии помочь.

0

Единственное рабочее решение, которое я нашел до сих пор вручную указать JOIN:

Field.joins('INNER JOIN "mailings" ON "mailings"."id" = "fields"."mailing_id"') 
    .where('mailings.id = ?', mailing_id)