Do not use Arel.star when ignored_columns

If there are any ignored columns, we will now list out all columns we
want to be returned from the database.

Includes a regression test.
This commit is contained in:
Jon Moss 2017-02-05 16:40:03 -05:00 committed by Gabriel Sobrinho
parent 5cd6f1792e
commit 6acde9578f
No known key found for this signature in database
GPG Key ID: 7625941819100124
2 changed files with 23 additions and 0 deletions

@ -1035,6 +1035,8 @@ def convert_join_strings_to_ast(table, joins)
def build_select(arel)
if select_values.any?
arel.project(*arel_columns(select_values.uniq))
elsif @klass.ignored_columns.any?
arel.project(*arel_columns(@klass.column_names))
else
arel.project(table[Arel.star])
end

@ -1476,4 +1476,25 @@ def test_default_values_are_deeply_dupped
assert_equal(%w(first_name last_name), Developer.ignored_columns)
assert_equal(%w(first_name last_name), SymbolIgnoredDeveloper.ignored_columns)
end
test "when #reload called, ignored columns' attribute methods are not defined" do
developer = Developer.create!(name: "Developer")
refute developer.respond_to?(:first_name)
refute developer.respond_to?(:first_name=)
developer.reload
refute developer.respond_to?(:first_name)
refute developer.respond_to?(:first_name=)
end
test "ignored columns not included in SELECT" do
query = Developer.all.to_sql
# ignored column
refute query.include?("first_name")
# regular column
assert query.include?("name")
end
end