Module: Rooftop::Rails::Extras::ContactFormHandler

Extended by:
ActiveSupport::Concern
Defined in:
app/controllers/concerns/rooftop/rails/extras/contact_form_handler.rb

Overview

A controller mixin to handle contact forms easily. If you don’t use Page as your page class, you need to specify it. You also need to specify the contact form class you’re using (which needs to inherit from Rooftop::Rails::Extras::ContactForm)

Instance Method Summary collapse

Instance Method Details

#createObject

Raises:

  • (ArgumentError)


27
28
29
30
31
32
33
34
35
36
37
38
# File 'app/controllers/concerns/rooftop/rails/extras/contact_form_handler.rb', line 27

def create
  raise ArgumentError, "You need to call contact_form=(YourClass) in your controller, which must inherit from Rooftop::Rails::Extras::ContactForm" unless self.class.contact_form.ancestors.include?(Rooftop::Rails::Extras::ContactForm)
  raise ArgumentError, "You need to include hidden fields for from_page and to_page IDs, so this controller can redirect appropriately" unless params.has_key?(:from_page) && params.has_key?(:to_page)
  form = self.class.contact_form.new(contact_form_params)
  
  from_page, to_page = *self.class.page_class.where(post__in: [params[:from_page], params[:to_page]], orderby: :post__in)
  if form.deliver
    redirect_to Rooftop::Rails::RouteResolver.new(:page, to_page.nested_path).resolve
  else
    redirect_to Rooftop::Rails::RouteResolver.new(:page, from_page.nested_path).resolve(contact_form_params.merge(errors: form.errors.keys)), notice: form.errors.full_messages.to_sentence
  end
end