【问题标题】:Formtastic ~> 2.0.2 and enumerated_attribute gem, Rails 3.1.1Formtastic ~> 2.0.2 和 enumerated_attribute gem,Rails 3.1.1
【发布时间】:2011-10-16 02:31:17
【问题描述】:

我使用 enumerated_attribute 和 formtastic ~> 1.2.3 和“猴子补丁”作为字段 :as => :enum 并且一切正常。

但是当我将 formtastic 更新到 2.0.2 版本时,出现错误消息“Formtastic::UnknownInputError”。

更多细节是补丁,它被添加到 /initialisers/formtastic.rb:

module Formtastic #:nodoc:
  class SemanticFormBuilder #:nodoc:
    def enum_input(method, options)
      unless options[:collection]
        enum = @object.enums(method.to_sym)
        choices = enum ? enum.select_options : []
        options[:collection] = choices
      end
      if (value = @object.__send__(method.to_sym))
        options[:selected] ||= value.to_s
      else
        options[:include_blank] ||= true
      end
      select_input(method, options)
    end
  end
end

附:我试图将 SemanticFormBuilder 更改为 FormBuilder (据我了解,从新的 formtastic 文档中,所有自定义输入都有这样的变化),但我仍然收到错误

也许有人已经成功地一起使用了这些宝石?

【问题讨论】:

    标签: formtastic rails-3.1 enumerated-types


    【解决方案1】:

    他们定义自定义字段的方式在 Formtastic 2.x 中完全改变了

    您需要对内部 Formtastic 类进行子类化以获得您想要的。选择输入看起来像这样:

    module FormtasticExtensions
      class EnumeratedInput < Formtastic::Inputs::SelectInput
        def collection
          # programmatically build an array of options in here and return them
          # they should be in this format:
          # [['name', 'value'],['name2', 'value2']]
        end
      end
    end
    

    在 Formtastic 初始化器中包含模块:

    include FormtasticExtensions

    这会给你一个字段:as =&gt; :enumerated,你应该很高兴。在我的情况下(其他一些自定义字段),它选择当前选项,但您可能需要调整代码才能使用。

    您也可以将集合传入:

    f.input :thing, :as => :select, :collection => your_collection, :label_method => :your_name, :value_method => :your_id

    【讨论】:

    • 感谢您的回答。我终于用你的收集方法让它工作了,但我使用了文件 app/inputs/enum_input.rb 的方法,我在其中描述了 class EnumInput github =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    相关资源
    最近更新 更多