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>