gpt4 book ai didi

ruby-on-rails - 在 ActiveAdmin 中获取 Formtastic 以使用自定义表单输入构建器

转载 作者:行者123 更新时间:2023-12-03 17:34:54 24 4
gpt4 key购买 nike

更新: 所以,我找到了 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

我的 Controller 现在看起来像这样:

  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 使用。所以,这就是我尝试做的事情:

在 Controller 中,我改变了方法:

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 初始化程序中添加一行才能使用此自定义输入:

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 使用此自定义输入类型的帮助都会很棒!

最佳答案

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

我的 Controller 与上面更新中看到的一样。但是,这是我将 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

希望这能帮助遇到同样问题的其他人!顺便说一句,硬编码的“问题”和“必需”是因为我只会在问题对象上使用这个自定义输入。可能有一种动态获取此信息的方法,但我决定不投入更多工作来弄清楚(这本身就够让人头疼的了!)

关于ruby-on-rails - 在 ActiveAdmin 中获取 Formtastic 以使用自定义表单输入构建器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12465020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com