Ask A Question

Notifications

You’re not receiving notifications from this thread.

Flexible Nested Attributes

Terence Devine asked in Rails

I'm working on a practice "Magazine" application, that has Issues with nested attributes of Articles, which has multiple nested attributes that are Content Blocks, which can be one of several types of Models (ie: Text Field, Image Upload, Image Gallery, etc).

Example
Issue

  • Article
  • - Content Block ( Text Field )
  • - Content Block ( Image )
  • - Content Block ( Text Field )
  • - Content Block ( Image Gallery )

In my head I've been referring to these Content Blocks as 'Flexible Nested Attributes'... not sure if theres any proper terminology for this?

I am using the Cocoon Gem for this.

I tried adding 'order_number' to Models, and just adding the two 'link_to_add_association' links as well as the respective fields for the form (see below) - and then ordering the two content types in the controller (see below-er)... which works, except for when I go to edit the form, and it orders all the items by their content type.

Do you know if the Cocoon gem can be used in this way? Or is there another gem I should be using (such as ActiveForm Gem)? Or if this is all wrong and maybe I should approach it some other way!?

Any help is greatly appreciated! Thanks!

= simple_form_for @recipe, html: { multipart: true } do |f|
    - if @recipe.errors.any?
        #errors
            %p
                = @recipe.errors.count
                Prevented this recipe from saving
            %ul
                - @recipe.errors.full_messages.each do |message|
                    %li= msg

    = f.input :title
    = f.input :description
    = f.input :image

    %h3 Contents
    #contents
        = f.simple_fields_for :images do |image|
            = render 'image_fields', f: image
        = f.simple_fields_for :textarea do |textarea|
            = render 'textarea_fields', f: textarea
        = link_to_add_association 'Add image', f, :images
        = link_to_add_association 'Add textarea', f, :textarea

    = f.button :submit
    def show
        @contents = @recipe.textarea + @recipe.images
        @contents = @contents.sort_by(&:order_number)
    end
Reply
Join the discussion
Create an account Log in

Want to stay up-to-date with Ruby on Rails?

Join 87,563+ developers who get early access to new tutorials, screencasts, articles, and more.

    We care about the protection of your data. Read our Privacy Policy.