class Marten::Handlers::RecordCreate

Overview

Handler allowing to create a new model record by processing a schema.

This handler can be used to process a form, validate its data through the use of a schema, and create a record by using the validated data. It is expected that the handler will be accessed through a GET request first: when this happens the configured template is rendered and displayed, and the configured schema which is initialized can be accessed from the template context in order to render a form for example. When the form is submitted via a POST request, the configured schema is validated using the form data. If the data is valid, the corresponding model record is created and the handler returns an HTTP redirect to a configured success URL.

class MyFormHandler < Marten::Handlers::RecordCreate
  model MyModel
  schema MyFormSchema
  template_name "my_form.html"
  success_route_name "my_form_success"
end

It should be noted that the redirect response issued will be a 302 (found).

The model class used to create the new record can be configured through the use of the #model macro. The schema used to perform the validation can be defined through the use of the #schema macro. Alternatively, the #schema_class method can also be overridden to dynamically define the schema class as part of the request handling.

The #template_name class method allows to define the name of the template to use to render the schema while the #success_route_name method can be used to specify the name of a route to redirect to once the schema has been validated. Alternatively, the #sucess_url class method can be used to provide a raw URL to redirect to. The same method can also be overridden at the instance level in order to rely on a custom logic to generate the sucess URL to redirect to.

Defined in:

marten/handlers/record_create.cr

Macro Summary

Instance Method Summary

Instance methods inherited from class Marten::Handlers::Schema

initial_data initial_data, post post, process_invalid_schema process_invalid_schema, process_valid_schema process_valid_schema, put put, schema schema, schema_class schema_class, success_url success_url

Class methods inherited from class Marten::Handlers::Schema

schema_context_name(name : String | Symbol)
schema_context_name : String
schema_context_name
, success_route_name(success_route_name : String | Nil)
success_route_name : String | Nil
success_route_name
, success_url(success_url : String | Nil)
success_url : String | Nil
success_url

Macros inherited from class Marten::Handlers::Schema

schema(schema_klass) schema

Macros inherited from module Marten::Handlers::Schema::Callbacks

after_failed_schema_validation(*names) after_failed_schema_validation, after_schema_validation(*names) after_schema_validation, after_successful_schema_validation(*names) after_successful_schema_validation, before_schema_validation(*names) before_schema_validation

Instance methods inherited from class Marten::Handlers::Template

get get

Class methods inherited from class Marten::Handlers::Template

template_name : String | Nil template_name

Instance methods inherited from module Marten::Handlers::Rendering

get_response(content) get_response, render_template(context : Hash | NamedTuple | Nil | Marten::Template::Context) render_template, render_to_response(context : Hash | NamedTuple | Nil | Marten::Template::Context = nil) render_to_response, template_name : String template_name

Instance methods inherited from class Marten::Handlers::Base

context context, delete delete, dispatch : Marten::HTTP::Response dispatch, get get, head(status : ::HTTP::Status | Int32) : HTTP::Response
head
head
, json(raw_json : String, status : ::HTTP::Status | Int32 = 200)
json(serializable, status : ::HTTP::Status | Int32 = 200)
json
, options options, params : Marten::Routing::MatchParameters params, patch patch, post post, put put, redirect(url : String, permanent = false) redirect, render(template_name : String, context : Hash | NamedTuple | Nil | Marten::Template::Context = nil, content_type = HTTP::Response::DEFAULT_CONTENT_TYPE, status : ::HTTP::Status | Int32 = 200) render, request : Marten::HTTP::Request request, respond(streamed_content : Iterator(String), content_type = HTTP::Response::DEFAULT_CONTENT_TYPE, status : ::HTTP::Status | Int32 = 200)
respond(content = "", content_type = HTTP::Response::DEFAULT_CONTENT_TYPE, status : ::HTTP::Status | Int32 = 200)
respond
, response : Marten::HTTP::Response? response, response! response!, reverse(*args, **options)
reverse(*args, **options, &)
reverse
, trace trace

Constructor methods inherited from class Marten::Handlers::Base

new(request : HTTP::Request, params : Routing::MatchParameters)
new(request : HTTP::Request, **kwargs)
new

Class methods inherited from class Marten::Handlers::Base

content_security_policy_block content_security_policy_block, http_method_names
http_method_names(*method_names : String | Symbol)
http_method_names

Instance methods inherited from module Marten::Handlers::Session

session(*args, **options)
session(*args, **options, &)
session

Instance methods inherited from module Marten::Handlers::RequestForgeryProtection

get_csrf_token get_csrf_token, referer_trusted? referer_trusted?

Instance methods inherited from module Marten::Handlers::Flash

flash(*args, **options)
flash(*args, **options, &)
flash

Instance methods inherited from module Marten::Handlers::Cookies

cookies(*args, **options)
cookies(*args, **options, &)
cookies

Macros inherited from module Marten::Handlers::Callbacks

after_dispatch(*names) after_dispatch, before_dispatch(*names) before_dispatch, before_render(*names) before_render

Macro Detail

macro model(model_klass) #

Allows to configure the model class that should be used to create the new record.


[View source]

Instance Method Detail

def model #

Returns the model used to create the new record.


[View source]
def process_valid_schema #

Produces the response when the processed schema is valid.

By default, this will create the new record and return a 302 redirect targetting the configured success URL.


[View source]
def record #

[View source]
def record=(r) #

[View source]