Class: LcpRuby::Display::Renderers::RecordLink
- Inherits:
-
BaseRenderer
- Object
- BaseRenderer
- LcpRuby::Display::Renderers::RecordLink
- Defined in:
- lib/lcp_ruby/display/renderers/record_link.rb
Overview
Renders a clickable link to another presenter’s index page, optionally with Ransack filter parameters pre-filled from the current record.
Options:
slug — static presenter slug (e.g., "import-rows")
model_field — record field whose value is a model name; resolved to
a routable presenter slug at render time
filter — Hash of Ransack predicate => value template.
Value templates starting with ":" are resolved from the
record (e.g., ":id" → record.id)
label — link text (default: humanized slug)
icon — optional icon name (rendered as <span class="lcp-icon ...">)
css_class — optional CSS class override (default: "btn btn-sm btn-outline-secondary")
Examples:
# Static slug with filter
field :id, renderer: :record_link, options: {
slug: "import-rows",
filter: { "job_execution_id_eq" => ":id" },
label: "Import Rows", icon: "list"
}
# Dynamic slug from model field
field :target_model, renderer: :record_link, options: {
model_field: "target_model",
filter: { "import_rows_job_execution_id_eq" => ":id" },
label: "Imported Records", icon: "external-link"
}
Instance Method Summary collapse
Instance Method Details
#link_producing? ⇒ Boolean
52 53 54 |
# File 'lib/lcp_ruby/display/renderers/record_link.rb', line 52 def link_producing? true end |
#render(value, options = {}, record: nil, view_context: nil) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/lcp_ruby/display/renderers/record_link.rb', line 34 def render(value, = {}, record: nil, view_context: nil) return nil unless view_context slug = resolve_slug(value, , record) return nil unless slug href = build_href(slug, , record, view_context) label_text = ["label"] || slug.tr("-_", " ").capitalize css = ["css_class"] || "btn btn-sm btn-outline-secondary" icon_html = if ["icon"] view_context.content_tag(:span, "", class: "lcp-icon lcp-icon-#{['icon']}") end inner = [ icon_html, " ", label_text ].compact.join.html_safe view_context.content_tag(:a, inner, href: href, class: css) end |