2

更新:所以,我发现了这个,显然这就是为什么这种旧的做事方式不起作用的原因,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:i:s 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 使用此自定义输入类型的帮助都将是惊人的!

4

1 回答 1

7

好吧,终于找到了正确的方法。

我的控制器与上面在更新中看到的保持一致。但是,我将 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

Hopefully this will help someone else running into the same problem! Btw, the hard-coded "question" and "required" is because I will only use this custom input on question objects. There is likely a way to dynamically get this information, but I decided against putting more work in to figure that out (this was enough of a headache on its own!)

于 2012-09-17T19:54:01.623 回答