Adding :from scoping to ActiveRecord calculations

Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#1229 state:committed]
This commit is contained in:
Matt Duncan 2009-08-08 20:10:01 -04:00 committed by Michael Koziarski
parent 1f6afe4a74
commit 3b3798506b
3 changed files with 10 additions and 0 deletions

View File

@ -197,6 +197,8 @@ module ActiveRecord
sql << ", #{options[:group_field]} AS #{options[:group_alias]}" if options[:group] sql << ", #{options[:group_field]} AS #{options[:group_alias]}" if options[:group]
if options[:from] if options[:from]
sql << " FROM #{options[:from]} " sql << " FROM #{options[:from]} "
elsif scope && scope[:from]
sql << " FROM #{scope[:from]} "
else else
sql << " FROM (SELECT #{distinct}#{column_name}" if use_workaround sql << " FROM (SELECT #{distinct}#{column_name}" if use_workaround
sql << " FROM #{connection.quote_table_name(table_name)} " sql << " FROM #{connection.quote_table_name(table_name)} "

View File

@ -2,6 +2,8 @@ require "cases/helper"
require 'models/company' require 'models/company'
require 'models/topic' require 'models/topic'
require 'models/edge' require 'models/edge'
require 'models/club'
require 'models/organization'
Company.has_many :accounts Company.has_many :accounts
@ -223,6 +225,10 @@ class CalculationsTest < ActiveRecord::TestCase
assert_equal 15, companies(:rails_core).companies.sum(:id) assert_equal 15, companies(:rails_core).companies.sum(:id)
end end
def test_should_sum_scoped_field_with_from
assert_equal Club.count, Organization.clubs.count
end
def test_should_sum_scoped_field_with_conditions def test_should_sum_scoped_field_with_conditions
assert_equal 8, companies(:rails_core).companies.sum(:id, :conditions => 'id > 7') assert_equal 8, companies(:rails_core).companies.sum(:id, :conditions => 'id > 7')
end end

View File

@ -1,4 +1,6 @@
class Organization < ActiveRecord::Base class Organization < ActiveRecord::Base
has_many :member_details has_many :member_details
has_many :members, :through => :member_details has_many :members, :through => :member_details
named_scope :clubs, { :from => 'clubs' }
end end