【问题标题】:pass form builder in remote_function in rails?在rails的remote_function中传递表单生成器?
【发布时间】:2009-12-17 19:16:24
【问题描述】:

我有选择框,在更改时我需要获取值并通过远程函数从 db 获取一些字段名称,然后在表单的下方生成这些字段,从选择框中选择什么选项。

问题是字段位于 f.form_for 中,因此使用的是包含选择框的 formbuilder f。因此,当我在控制器中通过 ajax 渲染部分内容时,由于没有参考,因此出现错误到本地表单生成器 f.

有谁知道我如何或是否可以获取对表单生成器的引用 orif 可以在远程函数调用中传递它,然后在部分传递给我的本地人?

非常感谢,任何帮助都会很棒,因为卡在这个问题上很长时间了!

干杯 瑞克

【问题讨论】:

  • 多纳托:标记为 20 分的答案不适用于嵌套表格,我无法删除我的赞成票,因此我在此处留下评论以供将来参考。
  • 2009 年 12 月 17 日回答的那个是更好的答案。

标签: jquery ruby-on-rails ruby ajax dynamic-data


【解决方案1】:

我遇到了同样的问题,我的解决方案是为同一个对象创建另一个表单构建器并将其传递给部分。

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 问题。

【讨论】:

  • 很好,工作。它在部分渲染中缺少右括号,我不得不删除第一行中的“/”。
  • 一旦我意识到通过“@object”你指的是控制器中的某个实例变量(为 AJAX 调用的那个)......这对我来说是@property(等等...)我的看起来像这样:
  • 嗨,Uri,我遇到了类似的问题。唯一的区别是我正在处理嵌套字段并使用fields_for而不是form_for。所以我必须做类似 f.fields_for :accessories 的事情,其中​​ f 是车辆模型的 form_builder 对象。协会就是这样的 Vehicle has_many Accessories。请在这种情况下提供帮助。提前致谢。
  • 通过JS动态呈现表单字段的真正聪明方法。谢谢你的提示。效果很好。
  • 我赞成这个答案,但在我尝试嵌套表单后,它根本不起作用。
【解决方案2】:

我会简单地重写您的部分以不使用 f。表单助手。

做:

<%= text_field :object_name, :method_name %>

代替:

<%= f.text_field :method_name %>

【讨论】:

【解决方案3】:

我正在做一些类似于 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 用于将变量的范围设置为超出表单块的范围。

我认为这是一种更好的方法,因为它不会将客户端暴露给我们的任何内部工作,而是将它们仅保留在服务器端。

【讨论】:

    【解决方案4】:

    这个 sn-p 在 cmets 中不太适合不同的答案......它有助于说明部分用于嵌套模型并在远程方法/操作中引用的情况。这也说明我对@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 下:我们有一个fields_for 嵌套在form_for 下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-31
      • 2014-06-26
      • 2011-08-09
      • 1970-01-01
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多