Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails AJAX:我的partial需要一个FormBuilder实例_Ruby On Rails_Ajax_Partial_Formbuilder - Fatal编程技术网

Ruby on rails Rails AJAX:我的partial需要一个FormBuilder实例

Ruby on rails Rails AJAX:我的partial需要一个FormBuilder实例,ruby-on-rails,ajax,partial,formbuilder,Ruby On Rails,Ajax,Partial,Formbuilder,因此,我在Rails应用程序中有一个表单,它使用自定义FormBuilder为我提供一些自定义字段标记 <% form_for :staff_member, @staff_member, :builder => MyFormBuilder do |f| %> [...] <%= render :partial => "staff_members/forms/personal_details", :locals => {:f => f, :skil

因此,我在Rails应用程序中有一个表单,它使用自定义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 %>

但是,如果我这样做,那么表单就会中断,因为我在表单_中使用的FormBuilder对象不再可用。我有没有办法在用于AJAX回调的分部中使用自定义FormBuilder对象?

您可以在控制器中实例化一个新的form builder实例,尽管我觉得有点糟糕:

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

或者,您可以将更多的更新逻辑移到客户端,而不需要担心呈现任何内容。您可以通过JS更新这些值。但是,不确定这是否适用于您的项目。

在您的项目中使用
字段。它执行类似的任务,但不包装表单标记。请参阅。

这个怎么样

  @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

这将特别有用,因为您需要在部分

中使用嵌套字段。\u可能我在这里玩得有点晚,可能我不太理解这个问题,但在ApplicationHelper.rb中,我认为您可以添加一行:

ActionView::Base.default_form_builder = MyFormBuilder

您可以在ajax调用中提交f.object_name的内容(它也适用于partials),并使用它来呈现作为第一个参数传递时定义的标记。

Hi,这就是我最后所做的:)这有点尴尬,但实际上传递对象比传递表单生成器感觉更好。但是,在实际需要表单生成器的情况下,你会怎么做?e、 g.当您调用嵌套字段(f.fields\u for)时,是否有解决方案@AndrewVit在你发表评论5年后,我仍然对此事耿耿于怀。有关如何按照@AndrewVit的要求使用
字段的解释,请参阅。TL;DR是指您不保留
f
作为接收器,因为它不在范围内。相反,您可以静态地分配字段名称(“事件[客户端属性]”“字段”),并在服务器(模型实例)的作用域中重新填充所需的内容。对于常规表单生成器,我也有同样的问题,我还会为其使用字段吗?对不起,这篇旧文章,但是js.erb文件呢?问题不在哪里吗?你的代码是指html.erb还是js.erb文件?你能给出一些实现的示例代码吗?
ActionView::Base.default_form_builder = MyFormBuilder