1

给定以下形式

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

而不是得到一个textareafor compositionand native_language_version,我得到

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

改为 using@entry = Entry.new给了我一个 textarea 元素,这就是我想要的:

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

我尝试在 中添加type: :text属性:compositionEntryForm但没有帮助。

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

我如何将compositionatext而不是 a的事实string传递EntryForm给 simple_form?

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

4

1 回答 1

2

你不能。当模型由 a 包裹时Reform::Form,您必须明确告诉 SimpleForm 您想要一个 textarea。

= f.input :composition, as: :text_area

原因是在确定列数据库类型时 SimpleForm依赖于Reform::Form 不提供的 ActiveRecord 接口的一部分。

于 2016-02-19T21:21:04.930 回答