如何为simple_form gem中的类型创建包装器?

时间:2016-04-21 12:09:12

标签: ruby-on-rails ruby-on-rails-4 simple-form

我想为我的应用创建一个包装器,但不同类型的html应该是不同的。所以,我可以写

= simple_for_for @task, wrapper: :mine_special do |f|
  = f.input :first_attr, type: :sring
  = f.input :second_attr, type: :boolean

所以,我的初始值设定项将包含string和&的定义。 boolean种类:

config.wrappers :mine_special, types: [:boolean] do |b|
  # configs here for check box
end

config.wrappers :mine_special, types: [:string] do |b|
  # configs here for text field
end

我该怎么做?

1 个答案:

答案 0 :(得分:0)

简而言之

我能想到的最好的解决方案就是以不同的方式命名包装器:

config.wrappers :mine_special_boolean
config.wrappers :mine_special_string

它很好地遵循simple_form语义,并且不需要记住传递type选项。

<强>解释

当您在模板中传递wrapper: :mine_special选项时,已经运行了简单的表单初始化代码,因此您不能简单地在包装块中插入if语句。从模板调用包装器时,它会将您的选项与您在初始化程序中定义的选项合并。

我可以想象一种覆盖SimpleForm::FormBuilder中某些方法的方法,根据您传入的type选项路由您的包装调用,但那时我可能会想知道它是否&# 39;值得复杂。