【发布时间】:2012-09-10 00:13:30
【问题描述】:
更新:所以,我找到了this,显然这就是为什么这种旧的做事方式不起作用的原因,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)
有什么想法吗?
当我尝试渲染:as => string 时,我遇到了 Formtastic 自动将日期格式化为我不想要的格式(Y-m-d h:i:s Z)的问题,因此我可以在现场使用日期选择器。在尝试解决这个问题时,我遇到了this solution。
这似乎是有道理的,并且与我正在处理的问题完全相同。但是,我似乎无法实施修复,我想知道是否是因为 Formtastic 正在通过 ActiveAdmin 使用。所以,这就是我尝试做的:
在控制器中,我改变了方法:
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 使用此方法,我可以根据需要更改它(目前从上面链接中提到的解决方案中获取)。
This article 提到您需要在您的表单初始化程序中添加一行以使用此自定义输入:
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 使用此自定义输入类型的帮助都会非常棒!
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 activeadmin formtastic