使用 simple_form 进行改革时使用了错误的类型

Wrong type being used when using simple_form with reform

给定以下形式

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

我得到的不是 compositionnative_language_versiontextarea,而是

<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 添加到 EntryForm 中的 :composition 属性,但没有帮助。

我也知道我可以指定实际的输入类型,而不是使用 f.input,但这是一个技巧。

如何通过 EntryFormcompositiontext 而不是 string 的事实传递给 simple_form?

我正在使用 Rails 4.2.5.1、simple_form 3.2.1 和改革 2.1.0。

你不能。当模型被 Reform::Form 包裹时,您必须明确告诉 SimpleForm 您想要一个文本区域。

= f.input :composition, as: :text_area

原因是在确定列数据库类型 SimpleForm relies on a part of ActiveRecord interface 时 Reform::Form 没有提供。