Не удается создать пользовательские входные данные для некоторых типов (Text, Booleans, ...) с помощью SimpleForm - PullRequest
0 голосов
/ 15 сентября 2011

Я не могу понять, почему это не работает должным образом - или - я пропускаю что-то важное?

Вот список отображенных типов из simple_form / lib / simple_form / form_builder.rb:

map_type :text,                                :to => SimpleForm::Inputs::TextInput
map_type :file,                                :to => SimpleForm::Inputs::FileInput
map_type :string, :email, :search, :tel, :url, :to => SimpleForm::Inputs::StringInput
map_type :password,                            :to => SimpleForm::Inputs::PasswordInput
map_type :integer, :decimal, :float,           :to => SimpleForm::Inputs::NumericInput
map_type :range,                               :to => SimpleForm::Inputs::RangeInput
map_type :select, :radio, :check_boxes,        :to => SimpleForm::Inputs::CollectionInput
map_type :date, :time, :datetime,              :to => SimpleForm::Inputs::DateTimeInput
map_type :country, :time_zone,                 :to => SimpleForm::Inputs::PriorityInput
map_type :boolean,                             :to => SimpleForm::Inputs::BooleanInput

Первая проблема, я могу расширить класс StringInput следующим образом:

#app/inputs/string_input.rb
class StringInput < SimpleForm::Inputs::StringInput
  def input
    if @builder.show?
      content_tag(:p, @builder.object[attribute_name], :class => :show)
    else
      super
    end
  end
end

(я расширил конструктор методом show? Для определения контекста: action =='show')

Это работает большую часть времени, но не при наличии :as => :string:

<%= f.input :estimated_duration_rendered, 
  :as => :string,
  :label => mt(:estimated_duration), 
  :hint => mt(:estimated_duration_hint),
  :error => false,
  :required => false,
  :input_html => { :class => :digits_11, :placeholder => mt(:estimated_duration_placeholder), :value => format_duration(resource.estimated_duration, true) }
%>

Вторая проблема, я могу создать пользовательские входы для StringInput, DateTimeInput, CollectionInput и BooleanInput, но все остальные не работают.Например:

#app/inputs/text_input.rb
class TextInput < SimpleForm::Inputs::TextInput
  def input
    if @builder.show?
      "I will never show..."
    else
      super
    end
  end
end

Даже если у меня есть этот помощник в моей форме:

<%= f.input :description, 
            :label => mt(:description), 
            :hint => mt(:description_hint, :max => MyModel::DESC_MAX_LENGTH), 
            :input_html => { :class => :large, :rows => 8, :cols => 1, :maxlength => MyModel::DESC_MAX_LENGTH, :placeholder => mt(:description_placeholder) }, 
            :error => false
%>

Конечно, описание имеет текстовый тип данных.

Что я делаю не так?

Спасибо.

Fro

1 Ответ

2 голосов
/ 16 сентября 2011

Что ж, для использования этой функциональности вам просто необходима версия SimpleForm 1.5.1 . : -)

...