При использовании simple_form с реформой используется неверный тип

Учитывая следующую форму

class EntryForm < Reform::Form
  property :composition
  property :native_language_version

  validates :composition, presence: true
end

и следующая схема

  create_table "entries", force: :cascade do |t|
    t.text     "composition"
    t.text     "native_language_version"
    t.integer  "language_id"
    t.datetime "created_at",              null: false
    t.datetime "updated_at",              null: false
  end

и следующий код контроллера

class EntriesController < ApplicationController
  def new
    @entry = EntryForm.new(Entry.new)
    # @entry = Entry.new
  end
end

и следующий код для simple_form

= simple_form_for(@entry) do |f|
  = f.input :composition
  = f.input :native_language_version
  = f.submit

вместо того, чтобы получить textarea за composition а также native_language_version, Я получил

<input class="string required form-control" type="text" name="entry[composition]" id="entry_composition">

переход на использование @entry = Entry.new вместо этого дает мне элемент textarea, чего я и хочу:

<textarea class="text optional form-control" name="entry[composition]" id="entry_composition"></textarea>

Я пытался добавить type: :text к :composition недвижимость в EntryForm, но это не помогло.

Я также знаю, что вместо того, чтобы использовать f.input Я мог бы указать фактический тип ввода, но это хак.

Как мне передать тот факт, что composition это text а не string через EntryForm в simple_form?

Я использую Rails 4.2.5.1, simple_form 3.2.1 и реформу 2.1.0.

1 ответ

Решение

Ты не можешь Когда модель обернута Reform::FormВы должны явно указать SimpleForm, что вы хотите текстовую область.

= f.input :composition, as: :text_area

Причина в том, что при определении типа базы данных столбцов SimpleForm опирается на часть интерфейса ActiveRecord, которую не предоставляет Reform::Form.

Другие вопросы по тегам