The attribute method defines which model attributes to index.
If you pass one or more symbols, it calls the methods with the same name.
If you pass it a block, you can only use one symbol to define the attribute name.
The block defines the value.
To keep your code as readable as possible:
attributes is an alias for attribute
You can call both methods multiple times
For example:
Ruby
Report incorrect code
Copy
class Contact < ActiveRecord::Base include AlgoliaSearch algoliasearch do # Sending 3 model attributes attributes :first_name, :last_name, :email # Sending a dynamic attribute defined by instance method attribute :full_name # Aliasing birth_date attribute to dob with shorthand block syntax attribute(:dob) { birth_date } # Nesting the company information for organization-sake attribute(:company) do {name: company_name, website: company_website} end end def full_name "#{first_name} #{last_name}" endend
If you’re using dynamic attributes,
you need to handle updates to those attributes manually.
For more information, see Automatic updates.
You can use the add_attribute and add_attributes methods,
if you want to add new attributes to your .
Ruby
Report incorrect code
Copy
class Contact < ActiveRecord::Base include AlgoliaSearch algoliasearch do # Since no +attribute+ were defined, all model attributes will be sent. # Plus the full_name attribute add_attribute(:full_name) do "#{first_name} #{last_name}" end endend
Every Algolia record needs an objectID.
By default, this gem uses Rails id as the Algolia objectID.To use a custom ID, use the id option.
Each objectID must be unique in the , or your records might be overwritten or deleted by other models.The id can be a model attribute or you can define your own attribute.
Ruby
Report incorrect code
Copy
class UniqUser < ActiveRecord::Base include AlgoliaSearch algoliasearch(id: :uniq_email) do endend
Ruby
Report incorrect code
Copy
class UniqUser < ActiveRecord::Base include AlgoliaSearch algoliasearch(id: :algolia_id) do end def algolia_id "user_#{id}" endend
You can use ActiveModelSerializers
to extract all logic for creating your records into a separate class.In the algoliasearch block, specify what class to use with use_serializer.
If specified, all attribute(s) methods are ignored.
You can still use add_attribute(s) and the tags or geoloc helpers.
Ruby
Report incorrect code
Copy
# post_serializer.rbclass PostSerializer < ActiveModel::Serializer attributes :id, :title, :text has_one :author has_many :commentsend# author_serializer.rbclass AuthorSerializer < ActiveModel::Serializer attributes :id, :nameend# comment_serializer.rbclass CommentSerializer < ActiveModel::Serializer attributes :text has_one :authorend# post.rbclass Post has_one :author has_many :comments algoliasearch do use_serializer PostSerializer # Also combine the serialize result with # `add_attribute`, `tags` or `geoloc` if necessary endend