Skip to content

Conversation

domcleal
Copy link

When using AR's .select to retrieve a subset of columns for a model,
calling the encrypted attribute reader results in an exception:

ActiveModel::MissingAttributeError: missing attribute: encrypted_street
gems/activerecord-5.1.5/lib/active_record/attribute_methods/read.rb:71:in `block in _read_attribute'
gems/activerecord-5.1.5/lib/active_record/attribute_set.rb:45:in `block in fetch_value'
gems/activerecord-5.1.5/lib/active_record/attribute.rb:219:in `value'
gems/activerecord-5.1.5/lib/active_record/attribute_set.rb:45:in `fetch_value'
gems/activerecord-5.1.5/lib/active_record/attribute_methods/read.rb:71:in `_read_attribute'
gems/activerecord-5.1.5/lib/active_record/attribute_methods/read.rb:36:in `__temp__56e636279707475646f5374727565647'
lib/attr_encrypted.rb:161:in `block (2 levels) in attr_encrypted'

The virtual attribute email is defined in the test, but the reader tries to
access the encrypted column which wasn't selected. This is a problem when
rendering a model #to_json with the default serialiser, as it tries to read
all defined columns.

Allow the reader to return nil in the case when the encrypted attribute
column isn't available.

When using AR's .select to retrieve a subset of columns for a model,
calling the encrypted attribute reader results in an exception:

    ActiveModel::MissingAttributeError: missing attribute: encrypted_street
    gems/activerecord-5.1.5/lib/active_record/attribute_methods/read.rb:71:in `block in _read_attribute'
    gems/activerecord-5.1.5/lib/active_record/attribute_set.rb:45:in `block in fetch_value'
    gems/activerecord-5.1.5/lib/active_record/attribute.rb:219:in `value'
    gems/activerecord-5.1.5/lib/active_record/attribute_set.rb:45:in `fetch_value'
    gems/activerecord-5.1.5/lib/active_record/attribute_methods/read.rb:71:in `_read_attribute'
    gems/activerecord-5.1.5/lib/active_record/attribute_methods/read.rb:36:in `__temp__56e636279707475646f5374727565647'
    lib/attr_encrypted.rb:161:in `block (2 levels) in attr_encrypted'

The virtual attribute `email` is defined in the test, but the reader tries to
access the encrypted column which wasn't selected. This is a problem when
rendering a model `#to_json` with the default serialiser, as it tries to read
all defined columns.

Allow the reader to return nil in the case when the encrypted attribute
column isn't available.
@domcleal domcleal force-pushed the attr-reader-with-limited-columns branch from 65ec470 to 707e6f1 Compare February 20, 2018 11:55
@tadast
Copy link

tadast commented Mar 13, 2018

Would be nice to get it merged, I'm also having the same problem 👍

@oortcloud1996
Copy link

I'm also facing same issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants