Skip to content

A high performance concern for Rails using the PostgreSQL array type.

License

Notifications You must be signed in to change notification settings

brightcommerce/attr_array

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AttrArray

A high performance ActiveRecord concern for Rails using the PostgreSQL array type.

Installation

To install add the line to your Gemfile:

gem 'attr_array'

And bundle install.

Dependencies

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.

How To Use

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.

Scopes

with_any_#{tag_name}
with_all_#{tag_name}
without_any_#{tag_name}
without_all_#{tag_name}

Class methods

all_#{tag_name}
{tag_name}_cloud

Setup

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

Usage

@post.tags = ["awesome", "slick"]
@post.authors = ["Roald Dahl"]

Post.with_any_authors("Roald Dahl")
Post.without_any_tags("slick")

Acknowledgements

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

Copyright 2017 Brightcommerce, Inc. All rights reserved.

About

A high performance concern for Rails using the PostgreSQL array type.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages