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しました。これを解決しようとして、私はこの解決策に出くわしました。

それは理にかなっているようで、私が扱っているのとまったく同じ問題です。しかし、私は修正を実装することができないようで、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 にこのメソッドを使用させることができれば、必要に応じて変更できると思います (現在、上記のリンクに記載されているソリューションからこれを取得しています)。

この記事では、このカスタム入力を使用するには、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

うまくいけば、これは他の誰かが同じ問題に遭遇するのを助けるでしょう! ところで、ハードコーディングされた「質問」と「必須」は、このカスタム入力を質問オブジェクトでのみ使用するためです。この情報を動的に取得する方法がある可能性がありますが、私はそれを理解するためにこれ以上の作業を行うことに決めました (これだけで十分に頭の痛い問題でした!)。

于 2012-09-17T19:54:01.623 に答える