Syrup::FormObject
¶ ↑
This is a simple implementation of the FormObject… pattern?
Installation¶ ↑
$ gem install syrup_form_object
or in the Gemfile
gem 'syrup_form_object'
Examples¶ ↑
Note: The following example can be found in syrup_form_example
To update the Event
class in your model
class Event < ActiveRecord::Base validates :start_date, presence: true validates :end_date, presence: true end
You create the follwing form
class EventForm < Syrup::FormObject wraps :event attribute :length_of_the_event, Integer validates :length_of_the_event, numericality: {greater_than: 0} before_validation :before_validation def before_validation self.end_date = event.start_date + length_of_the_event.to_i.hours end end
Create a controller similar to this one
class EventController < ApplicationController def new @event_form = EventForm.new end def create @event_form = EventForm.new(create_params) if @event_form.save redirect_to @event_form.event else render :new end end def create_params params.require(:event) .permit(:length_of_the_event, :start_date) end end
And in the template:
<%= form_for @event_form do %> <%= input_tag :start_date %> <%= input_tag :length_of_the_event %> <% end %>
Some sources for Form Objects¶ ↑
github.com/apotonick/reform An implementation of Form Objects
railscasts.com/episodes/416-form-objects
pivotallabs.com/form-backing-objects-for-fun-and-profit/
blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/