レールAJAX:私の部分が必要FormBuilderインスタンス
-
21-08-2019 - |
質問
そんな形で私のレールアプリを使用するカスタムFormBuilderを与えてくれるカスタムフィールドタグ
<% form_for :staff_member, @staff_member, :builder => MyFormBuilder do |f| %>
[...]
<%= render :partial => "staff_members/forms/personal_details", :locals => {:f => f, :skill_groups => @skill_groups, :staff_member => @staff_member} %>
[...]
<% end %>
現在、この部分があるエリアの形式を取得するに置き換えにより、AJAXのコールバック.私が終わってからのコントローラに対応し、AJAXの要求は:
render :partial => "staff_members/forms/personal_details", :locals => {:skill_groups => @skill_groups, :staff_member => @staff_member}
しかし、場合にしたいと思っているならその後の休憩にFormBuilderオブジェクトを使って、form_forアクセスすることができませんそのために使えるようになったのでカスタムFormBuilderオブジェクト内の一部に使用AJAXコールバック?
解決
あなたの部分の内側にfields_for
を使用してください。これは、同様のタスクを実行しますが、フォームタグをラップなし。 APIドキュメントを参照してください。
他のヒント
これはどう?
@template.with_output_buffer do
@template.form_for @model_object do |f|
f.fields_for :some_nested_attributes do |ff|
render :partial => 'nested_attributes', :object => @model_object, :locals => {:form => ff}
end
end
end
これは特に有用であろうと、あなたは、部分的に入れ子になったfields_forを使用する必要がある。
あなたは、コントローラでフォームビルダの新しいインスタンスをインスタンス化できます:
# in the controller
render :partial => {
:f => MyFormBuilder.new(:staff_member, @staff_member, template),
:skill_groups => @skill_groups,
:staff_member => @staff_member
}
また、あなたはまったく何もレンダリングを心配する必要はありません、クライアント側であることを更新ロジックの多くを移動することができます。あなただけのJSを経由して値を更新することができます。それはしかし、あなたのプロジェクトのために動作するかどうかわからない。
たぶん私はここにゲーム内で少し遅れだし、多分私が正しく質問を理解していないが、ApplicationHelper.rbに、私はあなただけの行を追加することができると思います:
ActionView::Base.default_form_builder = MyFormBuilder
お問い合わせください内でajaxのコンテンツのf.object_nameでも動作し項を網)を使って描画タグの定義 http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html 広い範囲にわたって最初の引数です。