使用 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
我得到的不是 composition
和 native_language_version
的 textarea
,而是
<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
,但这是一个技巧。
如何通过 EntryForm
将 composition
是 text
而不是 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 没有提供。
给定以下形式
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
我得到的不是 composition
和 native_language_version
的 textarea
,而是
<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
,但这是一个技巧。
如何通过 EntryForm
将 composition
是 text
而不是 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 没有提供。