获得Formtastic在ActiveAdmin使用自定义表单输入建设者(Getting Formt

2019-09-22 12:42发布

更新:所以,我发现这 ,显然这就是为什么做事情的这种老办法是行不通的,ActiveAdmin必须使用Formtastic 2.x版本 作为导演,我现在已经创建了一个文件, app/inputs/date_picker_input.rb看起来像这样:

class DatePickerInput
  include Formtastic::Inputs::Base

  def to_html
    puts "this is my datepickerinput"
  end
end

而我的控制器现在看起来是这样的:

  f.input :open_date, :as => :date_picker
  f.input :close_date, :as => :date_picker

但现在我遇到了此问题:

ActionView::Template::Error (undefined method 'html_safe' for nil:NilClass): 1: render renderer_for(:edit)

有什么想法吗?



我碰到一个问题,Formtastic自动格式化日期,格式,我不想(YMD H:我:■Z),当我尝试呈现:as => string ,所以我可以在球场上使用日期选择器。 在试图解决这个问题,我遇到了这个解决方案 。

这似乎是有道理的,是我处理相同问题。 不过,我似乎并没有能够实现修复,我不知道是否是因为正在通过ActiveAdmin使用Formtastic。 所以,在这里就是我试图做的:

在控制器中,我已经改变了方法,例如:

f.input :open_date, :as => :date

我也试过这一点,虽然我的问题是,即使不能够得到这一点:

f.input :open_date, :as => :date_input

我在创建文件lib/datebuilder.rb用下面的代码:

class DateBuilder < Formtastic::SemanticFormBuilder 
  def date_input(method, options) 
    current_value = @object.send(method) 
    html_options ||= {:value =>  current_value ? I18n.l (current_value) : @object.send("#{method}_before_type_cast")} 
    self.label(method, options.delete(:label), options.slice (:required)) + 
    self.send(:text_field, method, html_options) 
  end 
end 

我不知道,即使将固定的格式,因为我想,但我想如果我能先手Formtastic使用这种方法,我可以改变它根据需要(目前把这个从链接上面提到的解决方案)。

本文提到你需要一个行添加到您formtastic初始化器使用这个自定义输入:

Formtastic::SemanticFormHelper.builder = Formtastic::DateBuilder

我没有在这个初始化文件config/initializers ,所以我说这( config/initializers/formtastic.rb与上面的线)。 我现在运行到的问题是试图启动Rails应用程序时,这个错误:

../config/initializers/formtastic.rb:1:in '<top (required)>': uninitialized constant Formtastic::SemanticFormHelper (NameError)

我也试过这个语法在该文件中,而不是:

module Formtastic
  module SemanticFormHelper
    self.builder = DateBuilder
  end
end

这使我这个错误,而不是: ../config/initializers/formtastic.rb:3:in '<module:SemanticFormHelper>': uninitialized constant Formtastic::SemanticFormHelper::DateBuilder (NameError)

如果我在完全错误的方式去了解这个请让我知道,否则就越来越Formtastic使用这种自定义输入类型将是惊人的任何帮助!

Answer 1:

好了,终于想通了,这样做的正确方法。

我的控制器保持不变作为更新上面看到的。 然而,这里就是我改变了DatePicker的自定义输入文件( app/inputs/date_picker_input.rb )的样子:

class DatePickerInput < Formtastic::Inputs::StringInput
  def to_html
    "<li class='string input required stringish' id='question_#{method.to_s}_input'>" +
    "<label class=' label' for='question_#{method.to_s}'>#{method.to_s.gsub!(/_/, ' ').titleize}*</label>" +
    "<input id='question_#{method.to_s}' name='question[#{method.to_s}]' type='text' value='#{object.send(method)}' class='hasDatePicker'>" +
"</li>"
  end
end

希望这会帮助别人运行到同样的问题! 顺便说一句,硬编码的“问题”和“需要”,是因为我只会用在问题对象这个自定义输入。 有可能的方式来动态地获取这些信息,但我决定不把更多的工作,以找出答案(这是足够的本身就是一个头疼的!)



文章来源: Getting Formtastic in ActiveAdmin to use custom form input builder