Skip to main content

How do I order by an associations serialised value?

Rails • Asked by Andre Zimpel

Folowing setup:

I got a rails app with dynamic content types. An user can create a content type and add fields (string, integer...) to it. Those are basically the smae like reugale rails models but they are managable through the app and the ui.

So I got:

class ContentType < ApplicationRecord
  has_many :content_type_fields
  has_many :content_entries
  has_many :content_entry_fields, through: :content_entries
end
class ContentTypeField < ApplicationRecord
  belongs_to :content_type
  has_many :content_entry_fields
  has_many :content_entries, through: :content_entry_fields
end

In addition to that I got content entries. The content entry belongs to an content type that defines the available fields. Plus there are content entry fields. They represent the content for a field for an entry.

class ContentEntry < ApplicationRecord
  belongs_to :content_type
  delegate :content_type_fields, to: :content_type
  has_many :content_entry_fields
end
class ContentEntryField < ApplicationRecord
  belongs_to :content_entry
  belongs_to :content_type_field

  serialize :value, JSON
end

I do serialize the value of the content entry field to enable localisation, e.g.: {"en-US":true,"de-DE":false}.

An example:

There is a content type called billboards. It has a content type field for title, link and link_color.
Based on the type let's say there are the following entries:

1, Shop, shop.example.com, black
2, Lookbook, lookbook.example.com, #eee
3, About Us, example.com/about-us, red.

Please keep in that the values in the database would be something like {"en-US":"About Us","de-DE":"Über uns"}.

Well, here comes the question:

How do I order all the entries based on the content entry field?

Something like: order all entries by title ASC or by link DESC.

I hope you get what I want to achieve. Basically I want to be able to dynamically create models through the ap ui, add entries based on that and then serve them through an api.

Thank you very much!


Login or Create An Account to join the conversation.

Subscribe to the newsletter

Join 27,623+ developers who get early access to new screencasts, articles, guides, updates, and more.

    By clicking this button, you agree to the GoRails Terms of Service and Privacy Policy.

    More of a social being? We're also on Twitter and YouTube.