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

时间:2016-02-13 00:57:05

标签: ruby-on-rails ruby-on-rails-4 simple-form 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

而不是为textareacomposition获取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,但这是一个黑客攻击。

如何将compositiontext而不是stringEntryForm传递给simple_form?

我正在使用Rails 4.2.5.1,simple_form 3.2.1和改进2.1.0。

1 个答案:

答案 0 :(得分:2)

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

= f.input :composition, as: :text_area

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