Class: DrgcmsFormFields::Radio

Inherits:
Select show all
Defined in:
app/models/drgcms_form_fields/radio.rb

Overview

Implementation of radio DRG CMS form field. Field provides radio button input structure. Form options are mostly same as in select field.

Form options:

  • name: field name (required)

  • type: radio (required)

  • choices: Values for choices separated by comma. Values can also be specified like description:value.

In this case description will be shown to user, but value will be saved to document.

choices: 'OK:0,Ready:1,Error:2'
choices: Ruby,Pyton,PHP
  • eval: Choices will be provided by evaluating expression eval: dc_choices4(‘model_name’,‘description_field_name’,‘_id’); dc_choices4 helper will provide data for select field. eval: ModelName.choices4_field; ModelName class will define method choices4_field which will provide data for select field. Since expression is evaluated in the context of Form Field object

Even session session variables can be accessed.

eval: 'MyClass.method(@parent.session[:user_id])'

When searching is more complex custom search method may be defined in CollectionName model which will provide result set for search.

eval: collection_name.search_field_name.method_name;

If choices or eval is not defined choices will be provided from translation helpers. For example: Collection has field status. Choices for field will be provided by en.helpers.model_name.choices4_status entry of english translation. English is of course default translation. If you provide translations in your local language then select choices will be localized.

en.helpers.model_name.choices4_status: 'OK:0,Ready:1,Error:2'
sl.helpers.model_name.choices4_status: 'V redu:0,Pripravljen:1,Napaka:2'
  • inline: Radio buttons will be presented inline instead of stacked on each other.

Form example:

10:
  name: hifi
  type: radio
  choices: 'Marantz:1,Sony:2,Bose:3,Pioneer:4'
  inline: true

Instance Attribute Summary

Attributes inherited from DrgcmsField

#css, #js

Instance Method Summary collapse

Methods inherited from Select

#add_view_code, #choices_in_eval, #choices_in_helper, #get_choices, get_data, #ro_standard

Methods inherited from DrgcmsField

#__css_code, get_data, #hash_to_options, #html, #initialize, #record_text_for, #ro_standard, #set_css_code, #set_default_value, #set_initial_value, #set_style, #t

Constructor Details

This class inherits a constructor from DrgcmsFormFields::DrgcmsField

Instance Method Details

#renderObject

Render radio DRG Form field



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'app/models/drgcms_form_fields/radio.rb', line 66

def render
  set_initial_value('html','value')
  
  record = record_text_for(@yaml['name'])
  @yaml['html'].symbolize_keys!
  clas = 'dc-radio' + ( @yaml['inline'] ? ' dc-inline' : '')
  @html << "<div class=\"#{clas}\">"
  choices = get_choices
  # When error and boolean field
  #if choices.size == 1 and (@record[@yaml['name']].class == TrueClass or @record[@yaml['name']].class == FalseClass)
  #  choices = [[I18n.t('drgcms.true'), true], [I18n.t('drgcms.false'), false]]
  #end
  # Should select first button if no value provided
  value = if @record.nil? || @record[@yaml['name']].blank?
    choices.first.class == String ? choices.first :  choices.first.last
  else
    @record[@yaml['name']]
  end
  choices.each do |choice|
    choice = [choice, choice] if choice.class == String
    @html << "<div>"
    @html << @parent.radio_button_tag("#{record}[#{@yaml['name']}]",choice.last, choice.last.to_s == value.to_s)
    @html << choice.first
    @html << "</div>"
  end
  @html << "</div>\n"
  self
end