我正在使用simple_form_for
<%= simple_form_for( @form_object, url: wizard_path, :method => :put) do |f| %>
<%= f.input :website %>
<%= f.submit %>
</div>
<% end %>
但是,我也在使用表单对象
class Base
include ActiveModel::Model
# Validations
# Delegations
# Initializer
end
我的问题是我的输入没有映射到数据库列,所以https://github.com/plataformatec/simple_form#available-input-types-and-defaults-for-each-column-type
这些都没有显示,我可以创建自定义映射。
如果我检查委托字段的类,它们似乎显示为:string或:integer等。
答案 0 :(得分:2)
simple_form
使用2种方法从标准模型(type_for_attribute
和has_attribute?
)确定输入类型字段映射。 Source
由于您将模型包装在另一层中,但是仍然需要推断simple_form
提供的推论,您只需要通过
class Wrapper
include ActiveModel::Model
attr_reader :model
delegate :type_for_attribute, :has_attribute?, to: :model
def initialize(model)
@model = model
end
end
但是,如果您不包装模型,则需要自己定义这些方法,例如(使用新的rails 5.2 Attribute API)
class NonWrapper
include ActiveModel::Model
include ActiveModel::Attributes
attribute :name, :string
def type_for_attribute(name)
self.class.attribute_types[name]
end
def has_attribute?(name)
attributes.key?(name.to_s)
end
end
示例
a = NonWrapper.new(name: 'engineersmnky')
a.has_attribute?(:name)
#=> true
a.type_for_attribute(:name)
#=> => #<ActiveModel::Type::Value:0x00007fffcdeda790 @precision=nil, @scale=nil, @limit=nil>
注意,这样的表单对象可能需要其他附加内容才能与simple_form一起使用。该答案仅说明了如何处理输入映射推断