I made helper ​​for Bootstrap Form. In it I made ​​a separate method 
has_error?, who must determine whether the error messages, but this is not 
happening. How can I fix it? If there are still errors, omissions, and not 
the optimal code will once remarks and comments as to optimize (because I 
just learning ROR)

Here is the method itself has_error? (a piece of code from the file 
app/helpers/bootstrap_control_helper.rb: 93)

... def has_error?(obj, method) 
  obj.respond_to?(:errors) && !(method.nil? || obj.errors[method].empty?) end 
...

Here is the full text of the file app/helpers/bootstrap_control_helper.rb:

module BootstrapControlHelper 
  attr_reader :object, :template, :options 

  COMMON_OPTIONS = [:layout, :label_class, :label_col, :label_offset, 
:label_text, :control_class, :control_col, 
                     :control_offset, :invisible_label, :placeholder, :popover, 
:error_disable, :row_disable, :required] 

  LABEL_OPTIONS = [:layout, :label_class, :label_col, :label_text, 
:label_offset, :invisible_label] 

  CONTROL_OPTIONS = [:layout, :control_class, :control_col, :control_offset] 

  FIELD_HELPERS = %w{color_field date_field datetime_field datetime_local_field 
  email_field month_field number_field password_field phone_field 
  range_field search_field telephone_field text_area text_field time_field 
  url_field week_field} 

  DATE_SELECT_HELPERS = %w{date_select time_select datetime_select} 

  def self.create_tagged_field(method_name) 
    define_method(method_name) do |obj, method, options = {}| 
      generate_form_group(obj, method, options) do 
        super(obj, method, options.except(*COMMON_OPTIONS)) 
      end 
    end 
  end 

  FIELD_HELPERS.each do |method_name| 
    create_tagged_field(method_name) 
  end 

  def generate_form_group_row(options = {}) 
    options[:control_col] ? content_tag(:div, "", class: "row") { yield } : 
yield 
  end 

  def generate_form_group(obj, method, options = {}, &block) 
    generate_form_group_row(options.slice(:control_ col)) do 
      if options[:control_col] && options[:layout].nil? 
        options[:class] = [options[:class], 
grid_system_class(options[:control_col])].compact.join(" ") 
      end 
      options[:class] = [options[:class], "form-group"].compact.join(" ") 
      options[:class] = [options[:class], "has-error"].compact.join(" ") if 
has_error?(obj, method) 
      content_tag(:div, class: options[:class]) do 
        generate_label(obj, 
                        method, 
                        options. 
slice(*LABEL_OPTIONS)).concat(generate_control(options, &block)) 
      end 
    end 
  end 

  def generate_label(obj, method, options={}) 
    options[:class] = label_class(options) 
    label(obj, method, options[:label_text], options.slice(:class)) 
  end 

  def label_class(options={}) 
    options[:label_class] = [options[:label_class], "sr-only"].compact.join(" 
") if options[:invisible_label] 
    options[:label_class] = [options[:label_class], 
"control-label"].compact.join(" ") if options[:layout] == :horizontal 
    [label_col_class(options), options[:label_class]].compact.join(" ") 
  end 

  def label_col_class(options={}) 
    unless options[:label_col] 
      if options[:layout] == :horizontal 
        grid_system_class(defau lt_horizontal_label_col) 
      elsif options[:layout] == :inline 
        "sr-only" 
      end 
    else 
      options[:label_col] 
    end 
  end 

  def generate_control(options={}, &block) 
    options[:class] = control_class(options) 
    if options[:layout] == :horizontal 
      content_tag(:div, class: control_col_class(options)) { yield } 
    else 
      yield 
    end 
  end 

  def control_class(options={}) 
    ["form-control", options[:control_class]].compact.join(" ") 
  end 

  def control_col_class(options={}) 
    unless options[:control_col] 
      grid_system_class(default_horizonta l_control_col) if options[:layout] == 
:horizontal 
    else 
      grid_system_class(options[:control_ col]) 
    end 
  end 

  def has_error?(obj, method) 
    obj.respond_to?(:errors) && !(method.nil? || obj.errors[method].empty?) 
  end 

  def grid_system_class(col=default_control_col) 
    "col-#{default_grid_system}-#{col}" if (1..12).include?(col) 
  end 

  def grid_system_offset_class(col=default_offset_control_col) 
    "col-#{default_grid_system}-offset-#{col}" if (1..12).include?(col) 
  end 

  def default_offset_control_col 
    3 
  end 

  def default_horizontal_label_col 
    3 
  end 

  def default_control_col 
    12 
  end 

  def default_horizontal_control_col 
    7 
  end 

  def default_date_col 
    4 
  end 

  def default_grid_system 
    "sm" 
  end 

  def error_class 
    "has-error" 
  end end

Here is the full text of the file app/helpers/bootstrap_form_helper.rb:

module BootstrapFormHelper 

  def bootstrap_form_for(object, options={}, &block) 

    layout = case options[:layout] 
                when :inline 
                  "form-inline" 
                when :horizontal 
                  "form-horizontal" 
              end 

    if layout 
      options[:html] ||= {} 
      options[:html][:class] = [options[:html][:class], layout].compact.join(" 
") 
    end 

    form_for(object, options, &block) 
  end end

Here is the full text of the file app/helpers/bootstrap_builder_helper.rb:

module BootstrapBuilderHelper 
  class BootstrapBuilderHelper < ActionView::Helpers::FormBuilder # 
NestedForm::Builder 
    include BootstrapControlHelper 
    include BootstrapFormHelper 
  end end

And the form in which I test app / views / sessions / new.html.erb:

... <%= bootstrap_form_for(:session, url: sessions_path, html: { role: "form" 
}) do |session_fields| %> 
    <%= session_fields.text_field(:email, control_col: 8) %> 
    <%= session_fields.password_field(:password, control_col: 8) %> <% end %> 
...







-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-talk+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/189e630b-4daf-4104-865e-4db4f5986056%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to