在rails中的remote_function中传递表单构建器?
我有选择框在哪里更改我需要获取值,并通过远程函数从数据库获取一些字段名称,然后生成这些字段进一步向下选择框中的选项框中的选项。
问题是字段在f.form_for中,因此正在使用带有选择框的formbuilder f。所以当我通过控制器中的ajax渲染部分时,我得到一个错误,因为我没有对本地的引用表格建设者
有没有人知道如何或如果我可以获得对表单生成器的引用orif可以在远程函数调用中传递它然后传递到部分中的本地?
非常感谢,任何帮助都会很棒,因为长期以来一直困扰着这个!
欢呼瑞克
我有同样的问题,我的解决方案是为同一个对象创建另一个表单生成器并将其传递给部分。
remote_action.js.erb:
'<%= form_for(@object) do |ff| %>' $('#some_div').html("<%= j render(partial: 'some_partial', locals: {f: ff}) %>" '<% end %>'
form_for标记具有单引号或者存在javascript_escape问题非常重要。
我只想重写你的部分不使用f。 帮助者。
做:
<%= text_field :object_name, :method_name %>
代替:
<%= f.text_field :method_name %>
我正在做类似于Uri Klar建议的事情,但没有将表单元素作为字符串传递回客户端,因为它们不需要:
# create a form helper 'f' and store it in the variable form_helper. <% form_helper = nil %> <% form_for @object, url: '' do |f| %> <% form_helper = f %> <% end %> # pass form_helper to the form partial $('#element').html('<%= j render "form_element", f: form_helper %>');
请注意,第一行的form_helper = nil
用于将变量的范围设置为超出窗体块的范围。
我认为这是一种更好的方法,因为它不会将客户端暴露给我们的任何内部工作,而是将它们完全保留在服务器端。
这个片段在评论中不适合不同的答案……它有助于说明部分用于嵌套模型的情况,并在远程方法/操作中引用。 它还说明了我对@object的字面解释是不正确的:
'<%= form_for([@property.agency,@property]) do |parent_form| %> ' '<%= parent_form.fields_for :address do |f| %>' $('#property_addresses').append("<%= j render(partial: 'common_partials/address', locals: {parent_form: f}) %>") '<% end %>' '<% end %>'
注意,这是一个@property,嵌套在@ property.agency下:我们在form_for下嵌套了fields_for。