multitenant icon indicating copy to clipboard operation
multitenant copied to clipboard

#with_tenant method doesn't do it's job for ActiveRecord relations

Open k-rudy opened this issue 12 years ago • 2 comments

The problem I have faced is the following: with_tenant method works correctly only for cases where ActiveRecord relation queries db inside the with_tenant block. Otherwise, it is simply ignored.

In other words it works fine here (let's say there are 4 items and only 3 are with the tenant):

Multitenant.with_tenant @tenant do
  @items = Item.where("name IS NOT NULL").to_a 
end
puts @items.count # 3; all correct

But fails to work here:

Multitenant.with_tenant @tenant do
  @items = Item.where("name IS NOT NULL")
end
puts @items.count # 4; incorrect!

Spec that indicates the failure can be found here 81fcb097f1

k-rudy avatar Apr 20 '13 21:04 k-rudy

This looks to be working as expected since ActiveRecord::Relation is lazily evaluated. The current_tenant attribute is unset after the block has been run, and so invoking count or each outside of the with_tenant block will not add the extra query scope information.

If there is a way to support this usecase, I'm all for it. Do you have any suggestions or patches that work around the issue?

wireframe avatar Jun 24 '13 13:06 wireframe

@wireframe thanks for your input however personally for me this was not an expected behavior. If this is not gonna be fixed I would recommend adding a sort of note to the readme file about the fact that Relation should be compiled (evaluated) inside the with_tenant block.

k-rudy avatar Jun 27 '13 04:06 k-rudy