class Marten::Handlers::RecordUpdate

Overview

Handler allowing to update a 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 update an existing 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 model record that was retrieved is updated and the handler returns an HTTP redirect to a configured success URL.

class MyFormHandlers < Marten::Handlers::RecordUpdate
  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 update the 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.

Included Modules

Extended Modules

Defined in:

marten/handlers/record_update.cr

Class Method Summary

Instance Method Summary

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

model model, queryset queryset, record record

Macros inherited from module Marten::Handlers::RecordRetrieving

model(model_klass) model, queryset(queryset) queryset

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

content_type : String | Nil content_type, template_name : String | Nil template_name

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

content_type : String content_type, render_to_response(context : Hash | NamedTuple | Nil | Marten::Template::Context = nil, status : ::HTTP::Status | Int32 = 200) 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

Class Method Detail

def self.lookup_field : String #

Returns the name of the model field that will be used to retrieve the record (defaults to pk).


def self.record_context_name(name : String | Symbol) #

Allows to configure the name to use to include the model record into the template context.


[View source]
def self.record_context_name : String #

Returns the name to use to include the model record into the template context (defaults to record).


[View source]

Instance Method Detail

def initial_data #

Returns a hash of initial data, computed from the considered record, to prepare the schema.


[View source]
def process_valid_schema #
Description copied from class Marten::Handlers::Schema

Produces the response when the processed schema is valid.

By default, this will return a 302 redirect targetting the configured success URL.


[View source]