Fix to handle MetaWhere and non-MetaWhere conditions correctly.

This commit is contained in:
Anuj Dutta
2012-05-26 18:00:50 +01:00
parent 0c21831b4d
commit c27ead5b9f
4 changed files with 27 additions and 1 deletions

View File

@@ -89,7 +89,12 @@ module CanCan
if override_scope
@model_class.scoped.merge(override_scope)
elsif @model_class.respond_to?(:where) && @model_class.respond_to?(:joins)
@model_class.where(conditions).joins(joins)
mergeable_conditions = @rules.select {|rule| rule.unmergeable? }.blank?
if mergeable_conditions
@model_class.where(conditions).joins(joins)
else
@model_class.where(*(@rules.map(&:conditions))).joins(joins)
end
else
@model_class.scoped(:conditions => conditions, :joins => joins)
end

View File

@@ -54,6 +54,10 @@ module CanCan
@conditions == {} || @conditions.nil?
end
def unmergeable?
@conditions.respond_to?(:keys) && (! @conditions.keys.first.kind_of? Symbol)
end
def associations_hash(conditions = @conditions)
hash = {}
conditions.map do |name, value|