# Blocks & Fields ## Database blocks ``` id = 1 resource_type="Page" resource_id="1" name = 'people', position = 1 ``` fields ``` id = 1 block_id="1" name = 'people_title' type = 'string' value = 'test' id = 2 block_id="1" name = 'people_people' type = 'list' id = 3 block_id="1" name = 'people_people_1_person' type = 'group' parent_id = 2 id = 4 block_id="1" name = 'people_people_1_person_name' type = 'string' parent_id = 3 value = 'Jef' id = 5 block_id="1" name = 'people_people_2_person' type = 'group' parent_id = 2 id = 6 block_id="1" name = 'people_people_2_person_name' type = 'string' parent_id = 6 value = 'Gert-Jan' ``` ## Models ```rb # models/page.rb class Page < ActiveRecord::Model has_many :blocks, as: :blockable end ``` ```rb # models/block.rb class Block < ActiveRecord::Model belongs_to :blockable, polymorphic: true has_many :fields # db to hash def fields_hash { title: 'test', people: [ {name: 'Jef'}, {name: 'Gert-Jan'} ] } end end ``` ```rb # models/block/fields.rb class Block::Field < ActiveRecord::Model self.table_name = 'block_fields' belongs_to :block end ``` ## Controllers ```ruby # website/pages_controller.rb class PagesController < ApplicationController def show @page = Page.friendly.find(params[:slug]) end end ``` ## Views ```erb # admin/pages/_form.html.erb <%= render 'blocks/people', required: true, moveable: false %> <%= render 'blocks/menu', required: true, moveable: false %> <%= render 'blocks/contact_form', required: true, moveable: false %> <%= render 'blocks/map', required: true, moveable: false %> <%= render 'blocks/heading', required: false, moveable: true %> <%= render 'blocks/text', required: false, moveable: true %> <%= render 'blocks/image', required: false, moveable: true %> <%= render 'blocks/video', required: false, moveable: true %> ``` ```erb # admin/blocks/_people.html.erb
``` ```erb # website/pages/show.html.erb <% @page.blocks.each do |block| %> <%= render "block_#{block.name}", block: block %> <% end %> ``` ```erb # website/blocks/_people.html.erb <% fields = block.fields_hash %> <%= fields[:title] %> <% fields[:people].each do |person| %> <%= person[:name] %> <% end %> ```