Dav*_*age 2 ruby-on-rails formtastic ruby-on-rails-3 activeadmin
更新:所以,我发现了这一点,显然这就是为什么这种旧的做事方式不起作用,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
Run Code Online (Sandbox Code Playgroud)
我的控制器现在看起来像这样:
f.input :open_date, :as => :date_picker
f.input :close_date, :as => :date_picker
Run Code Online (Sandbox Code Playgroud)
但现在我遇到了这个错误:
ActionView::Template::Error (undefined method 'html_safe' for nil:NilClass):
1: render renderer_for(:edit)
有什么想法吗?
我遇到了一个问题,Formtastic自动将日期格式化为我不想要的格式(Ymd h:i:s Z),当我尝试渲染时:as => string,我可以在该字段上使用日期选择器.在试图解决这个问题时,我遇到了这个解决方案.
它似乎有意义,是我正在处理的完全相同的问题.但是,我似乎无法实现修复,我想知道是否因为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
Run Code Online (Sandbox Code Playgroud)
我不确定是否会按照我想要的方式修复格式,但我认为如果我可以让Formtastic使用这种方法我可以根据需要改变它(目前从上面链接中提到的解决方案中获取).
本文提到您需要在formtastic intializer中添加一行以使用此自定义输入:
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
Run Code Online (Sandbox Code Playgroud)
这给了我这个错误: ../config/initializers/formtastic.rb:3:in '<module:SemanticFormHelper>': uninitialized constant Formtastic::SemanticFormHelper::DateBuilder (NameError)
如果我以完全错误的方式解决这个问题,请告诉我,否则任何有关让Formtastic使用此自定义输入类型的帮助都会非常棒!
好吧,终于找到了正确的方法来做到这一点.
我的控制器在更新中与上面看到的相同.但是,这是我将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
Run Code Online (Sandbox Code Playgroud)
希望这会帮助其他人遇到同样的问题!顺便说一句,硬编码的"问题"和"必需"是因为我只会在问题对象上使用这个自定义输入.可能有一种方法可以动态地获取这些信息,但我决定不再花费更多的工作来解决这个问题(这本身就足够了!)
| 归档时间: |
|
| 查看次数: |
3984 次 |
| 最近记录: |