これが私がこれまでに得たものです:
class MemberSitePosition < ActiveRecord::Base
acts_as_paranoid
belongs_to :member, -> { with_deleted }
belongs_to :position
...
}
class Member < ActiveRecord::Base
include ::Hierarchical
acts_as_paranoid
has_many :member_site_positions
...
}
// Get all member associated to a site with their position
@msps = member_site_positions.includes(:position, { member { profile: :item }}).where(position_id: position_ids, member_id: member_ids)
@msps.each do |msp|
member = msp.member
// ... do stuff with member
end
そのクエリは魔法のように機能します。すべてのメンバーが自分のサイトに関連付けられているすべてのメンバーを自分の位置に関連付けます。
しかし、注文しようとすると、
@msps = member_site_positions.includes(:position, { member { profile: :item }}).where(position_id: position_ids, member_id: member_ids)
.order("positions.order") // adding the order
@msps.each do |msp|
member = msp.member // Member is nil only if I pass the order (and member is deleted)
end
削除されたメンバーにアクセスしようとすると、現在は nil です。
私が発見したのは、注文を追加すると、生成クエリが追加されることです
Left outer join tableX x ON x.id = main_table.x_id AND x.deleted_at IS NULL
include x.deleted_at IS NULL OR x.deleted_at IS NOT NULL という where 句を使用しても、結合で拒否されるため含まれません。
私は Rails 4.2.3 と paranoia 4.2.3 を使用しています。いくつかの設定を確認しようとしましたが、しばらくして Rails 4.2.1 を使用すると問題なく動作することがわかりました。可能であれば、Rails 4.2.3 を維持したいと思います。
問題を解決するにはどうすればよいですか? 誰かがアイデアを思いついたら、私はそれを試す準備ができています. 少し早いですがお礼を。
joins(:position) 、 joins(:member) 、およびその両方を追加しようとしましたが、結果は同じでした
変えてみた
belongs_to :member, -> { with_deleted }
為に
belongs_to :member, -> { with_deleted.unscope(where: :deleted_at) }
belongs_to :member, -> { unscope }
しかし、それは何も変わりません