A high performance ActiveRecord concern for Rails using the PostgreSQL array type.
To install add the line to your Gemfile:
gem 'attr_array'
And bundle install
.
AttrArray is developed as a ActiveRecord model concern, therefore it is dependent upon ActiveSupport. It is also developed only for use with PostgreSQL. It may work with other databases, but I haven't tried them.
To add AttrArray to a model, include the concern:
class Post < ActiveRecord::Base
include AttrArray
attr_array :tags
end
To autoload AttrArray for all models, add the following to an initializer:
require 'attr_array/active_record'
You then don't need to include AttrArray
in any model.
with_any_#{tag_name}
with_all_#{tag_name}
without_any_#{tag_name}
without_all_#{tag_name}
all_#{tag_name}
{tag_name}_cloud
Add the model attributes you want to use with AttrArray in your migration:
class CreatePost < ActiveRecord::Migration[5.1]
def change
create_table :posts do |table|
table.column :tags, :string, array: true, default: [], index: {using: 'gin'}
table.column :authors, :string, array: true, default: [], index: {using: 'gin'}
table.timestamps
end
end
end
You can nominate multiple attributes in the attr_array
class method:
class Post < ApplicationRecord
include AttrArray
attr_array :tags, :authors
end
@post.tags = ["awesome", "slick"]
@post.authors = ["Roald Dahl"]
Post.with_any_authors("Roald Dahl")
Post.without_any_tags("slick")
This gem is based on code from pg_tags. Modified to use ActiveSupport::Concern and doesn't automatically hook into ActiveRecord.
This gem is maintained by Jurgen Jocubeit.
Copyright 2017 Brightcommerce, Inc. All rights reserved.