13

activeAdminフォームメソッド内でrenderメソッドを使用しようとしましたが、コードにrenderを挿入した後、機能しなくなりました。

form do |f|
    f.inputs I18n.t('sale_header') do
      f.input :client
      f.input :room
    end

    f.inputs I18n.t('sale_items')  do
      render :partial => "form_sale"
    end

    f.inputs I18n.t('totalization') do
      f.input :sub_total, :input_html => { :disabled => :true }
      f.input :discount
      f.input :total_value, :input_html => { :disabled => :true }
    end

    f.buttons
end

render メソッドを挿入すると、form_sale コンテンツのみが画面に表示されます。

何か助けはありますか?ありがとう!

4

4 に答える 4

8

ドキュメントによると、active_admin でフォームをカスタマイズする正しい方法は次のとおりです。

ActiveAdmin.register Post do
  form :partial => "form"
end

次に、部分的な「_form.html.erb」で、次のようなformtastic DSLを使用する必要があります。

 <%= semantic_form_for [:admin, @post] do |f| %>
   <%= f.inputs :title, :body %>
   <%= f.buttons :commit %>
 <% end %>

ウェブページには明確に記載されています:

If you require a more custom form than can be provided through the DSL, you can pass 
a partial in to render the form yourself.

つまり、active_admin の DSL には若干の制限があります。

「render」と「form :partial」を使用したすべての実験は、結果なしで終了しました。partial を使用したい場合は、すべての form を置き換える必要があります。

于 2012-12-18T00:20:19.913 に答える
2

多くの場合、 form :partial => "form" を使用していますが、これはカスタム フォームが必要な場合に最適な方法です。

この回答は正しいものとして受け入れられるものではありませんが、ERB を部分的にしたくない場合があり、ほぼ完全な AA 生成フォームにコンテンツを追加したいだけです。

このトリックを使用するときのために、この初期化子を使用してコンテンツ メソッドを AA FormBuilder に追加します。

ActiveAdmin::FormBuilder.class_eval do
  def content
    form_buffers.last << with_new_form_buffer do
        yield
    end
  end
end

そして、AA フォーム ブロックで f.content() を使用できます。

  form do |f|
    f.content do content_tag(:p, "Hello world!") end
      f.inputs do
        f.input :foo
        f.input :bar
      end
      f.content do content_tag(:p, "Hello world!") end
      f.buttons
    end
于 2012-12-21T11:20:36.647 に答える
1

これを呼び出すとrender、実際には応答全体がレンダリングされます。これをネストしようとしていると仮定して、 を試してくださいrender_to_string。あなたが form_sale に何を持っているのか、それがそのブロックで何を望んでいるのかは完全にはわかりませんが.

于 2012-12-17T19:17:41.747 に答える
1

クマラ そうですね。それでも、アクティブな管理者〜formtastic DSLブリッジへのモンキーパッチは可能です。私にとってうまくいったのは、 config/initializers/active_admin.rb ファイルで ActiveAdmin::Formbuilder クラスを開くことです。そこに私は追加しました:

class ActiveAdmin::FormBuilder
  include ActionView::Helpers::TagHelper
  def custom_capture_text content
    form_buffers.last << template.content_tag(:li,content.html_safe)
  end

終わり

それからあなたは書くことができます

f.inputs I18n.t('sale_items')  do
  f.custom_capture_text(f.template.render(:partial => "form_sale"))
end

これは、activeadmin 0.3 から 0.5 で機能しました。しかし、注意してください。ActiveAdmin のアップグレードで壊れる可能性があります。幸運を。

于 2012-12-18T10:33:58.420 に答える