提交 4f21d42f 编写于 作者: R Rafael Sales

Refactor Calculations#execute_grouped_calculation and clean AR test case

* When tried to use `Company#accounts` test/models/company.rb I got:

```
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column:
accounts.company_id: SELECT COUNT(*) AS count_all, "companies"."firm_id"
AS companies_firm_id FROM "companies" INNER JOIN "accounts" ON
"accounts"."company_id" = "companies"."id" GROUP BY "companies"."firm_id"
```

* The refactor on Calculations class was just to simplify the code
上级 c2d33c4a
......@@ -277,14 +277,8 @@ def execute_grouped_calculation(operation, column_name, distinct) #:nodoc:
end
group_fields = arel_columns(group_fields)
group_aliases = group_fields.map { |field|
column_alias_for(field)
}
group_columns = group_aliases.zip(group_fields).map { |aliaz,field|
[aliaz, field]
}
group = group_fields
group_aliases = group_fields.map { |field| column_alias_for(field) }
group_columns = group_aliases.zip(group_fields)
if operation == 'count' && column_name == :all
aggregate_alias = 'count_all'
......@@ -300,7 +294,7 @@ def execute_grouped_calculation(operation, column_name, distinct) #:nodoc:
]
select_values += select_values unless having_clause.empty?
select_values.concat group_fields.zip(group_aliases).map { |field,aliaz|
select_values.concat group_columns.map { |aliaz, field|
if field.respond_to?(:as)
field.as(aliaz)
else
......@@ -309,7 +303,7 @@ def execute_grouped_calculation(operation, column_name, distinct) #:nodoc:
}
relation = except(:group)
relation.group_values = group
relation.group_values = group_fields
relation.select_values = select_values
calculated_data = @klass.connection.select_all(relation, nil, relation.bound_attributes)
......
......@@ -10,7 +10,6 @@ class Company < AbstractCompany
has_one :dummy_account, :foreign_key => "firm_id", :class_name => "Account"
has_many :contracts
has_many :developers, :through => :contracts
has_many :accounts
scope :of_first_firm, lambda {
joins(:account => :firm).
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册