New feature suggestion: ActiveRecord store_reader

Hello,

I’d like to propose this feature:

Like attr_reader, I’d like to see a store_reader AR class method which adds store getter methods.

Why? Consider this:

class User < ActiveRecord::Base
store_accessor :data, :name
end

user = User.new(name: “John Doe”, data: {fav_tv_show: “Twin Peaks”})
user.name #=> nil
user.data #=> {“fav_tv_show” => “Twin Peaks”}

``

To avoid this, I’d like the opportunity to force writing without the store setter method while providing the convenience store getter method.

Would this addition be considered? If so, I’m happy to work on it.

You could write this with store_accessor already:

def self.store_reader(store_attribute, *keys)

store_accessor(store_attribute, *keys)

keys.each { |k| undef_method(“#{k}=") }

end

Or swap in “private” for “undef_method” if you want to use the setters internally.

—Matt Jones

That’s definitely an option (nice two-liner btw) but I’d rather not have to do that in every app (I’m using JSONB columns more and more these days).

Since there’s attr_accessor and attr_reader, is it not reasonable to have store_reader alongside store_accessor?