这是我到目前为止得到的:
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
当我尝试访问它们时,被删除的成员现在为零。
我发现当我添加订单时,生成查询添加
Left outer join tableX x ON x.id = main_table.x_id AND x.deleted_at IS NULL
即使使用 where 子句包含 x.deleted_at IS NULL OR x.deleted_at IS NOT NULL 因为它们在连接中被拒绝,它们也不包括在内。
我正在使用 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 }
但它什么也没改变