Rails AJAX: My partial needs a FormBuilder instance

£可爱£侵袭症+ 提交于 2019-11-28 07:35:38

Use fields_for inside your partial. It performs a similar task but without wrapping the form tags. See the API docs.

how about this?

  @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

this would be especially useful is you need to use the nested fields_for in the partial

You could instantiate a new instance of your form builder in the controller, though it feels sort of lousy to me:

# in the controller
render :partial => {
  :f => MyFormBuilder.new(:staff_member, @staff_member, template),
  :skill_groups => @skill_groups,
  :staff_member => @staff_member
}

Alternatively, you could move more of the update logic to be client side which wouldn't require you to worry about rendering anything at all. You could just update the values via JS. Not sure if that works for your project though.

Maybe I'm a little late in the game here, and maybe I don't understand the question properly, but in ApplicationHelper.rb I think you can just add the line:

ActionView::Base.default_form_builder = MyFormBuilder

You can submit within your ajax call the content of f.object_name (it's also works with partials) and use it to render tags defined in http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html passing it as the first argument.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!