Skip to content

Add large text fields to any model without needing to migrate those models.

License

Notifications You must be signed in to change notification settings

Invoca/large_text_field

Repository files navigation

LargeTextField

This gem allows any model to be associated with multiple named text fields. Each field can hold up to 5 million UTF8 characters. Defining new fields on models does not require database migrations. All text fields are stored in a central table that is polymorphically associated with the model, but they act like a column on the same model.

How do I use it?

In you Gemfile add:

  gem large_text_field

There will be database migration you need to run to define the table, so go ahead and run that...

Any class that wants to define a large text field should include ::LargeTextField::Owner, and then define text fields by calling the large_text_field macro.

For example the following is a Library class that has large text fields for notes and description.

class Library < ApplicationRecord
  include ::LargeTextField::Owner

  large_text_field :notes
  large_text_field :description
end

That's it! You can then access notes and description as if they were columns on your class.

The large_text_field macro takes the following options...

  • maximum: number - The maximum length of a large text field. By default this is 5,000,000 characters, but it can be set to less using this option.
  • singularize_errors: boolean - should validation messages be singularized.

Large text fields defaults to an empty string. You cannot store nil in a large text field.

Please note: Large text field uses the before_save callback on the class that is the owner for book-keeping.
Callbacks are great, but if there are multiple handlers for the same callback the order in which they are called is not predictable. If you want to make changes to large_text_field values in the before_save callback, use the large_text_field_save callback instead. This will be called before the large text field book-keeping so your changes will be saved. For example, this will call the save_preprocess method on your class before the large text fields are saved...

  set_callback(:large_text_field_save, :before, :save_preprocess)

This project rocks and uses MIT-LICENSE. You should too.

About

Add large text fields to any model without needing to migrate those models.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages