Ruby on rails 缺少表单对象映射的简单表单

Ruby on rails 缺少表单对象映射的简单表单,ruby-on-rails,ruby-on-rails-5.2,simple-form-for,Ruby On Rails,Ruby On Rails 5.2,Simple Form For,我使用的是简单表单 <%= simple_form_for( @form_object, url: wizard_path, :method => :put) do |f| %> <%= f.input :website %> <%= f.submit %> </div> <% end %> 我的问题是我的输入没有映射到我的数据库列,所以 这些都没有显示,我可以创建自定义映射 如何允许Simple_form查

我使用的是简单表单

<%= simple_form_for( @form_object, url: wizard_path, :method => :put) do |f| %>
    <%= f.input :website %>
    <%= f.submit %>
  </div>
<% end %>
我的问题是我的输入没有映射到我的数据库列,所以

这些都没有显示,我可以创建自定义映射

如何允许Simple_form查看我的列类型并正确工作?
如果我检查委托字段的类,它们似乎显示为:string或:integer等。

simple\u form
使用两种方法从标准模型确定输入类型字段映射(
type\u for\u attribute
has\u attribute?

由于您正在将模型包装到另一个层中,但仍然需要
simple\u 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属性API)

范例

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>
a=NonWrapper.new(名称:“engineersmnky”)
a、 是否具有_属性?(:名称)
#=>正确
a、 键入_作为_属性(:name)
#=>  => #

注意像这样的表单对象可能需要添加其他内容才能使用简单的表单。这个答案简单地解释了如何处理输入映射推断

“下表显示了根据数据库定义为每个属性获取的html元素。可以通过将列映射中的helper方法指定为as:选项来更改这些默认值。”。看来你要找的是
?您似乎还可以使用该方法在Base中指定类型,例如
属性:website,:string
我正在使用
delegate attr.to_sym,“#{attr}=“.to_sym,to:model
,not attribute,是否可以使用delegate添加类型,如果可以,如何添加?我不希望手动设置为:option@engineersmnky^有什么想法吗?尝试将
type_for_attribute
has_attribute?
添加到委派中,例如
委派:type_for_attribute、:has_attribute?、to:model
似乎它应该根据,正如它将:string或:integer视为另一个属性一样
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>